移除重复节点
01. 移除重复节点
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
示例 1:
输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]
示例 2:
输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]
代码
const head = {
'val':1,
'next':{
'val':2,
'next':{
'val':3,
'next':{
'val':3,
'next':{
'val':2,
'next':undefined
}
}
}
}
}
思路:
- 首先创建一个 set,用来保存唯一的值。
- 为了遍历链表,先定义一个指针, 用于指向当前的节点。 遍历的时候检查当前节点的值是否在 set 里面
- 如果没有, 就添加; 如果有,说明这个节点需要被移除, 移除的时候需要把当前节点的前一个节点的 next 指针改为当前节点的下一个节点, 所以需要再定义另外一个指针, 用来记录前一个节点。
class LinkNode {
constructor(val,next){
this.val = val
this.next = next || null
}
}
var removeDuplicateNodes = function(head) {
let set = new Set()
// 拷贝
let slow = head
let fast = head
while(fast){
if(!set.has(fast.val)){// 不存在
set.add(fast.val)
// 慢指针记录
slow = fast
}else{ // 存在
// 慢指针干预:向前跳一位
slow.next = fast.next // 此时可以对原数据进行改变??
}
fast = fast.next
}
return head
};
console.log(removeDuplicateNodes(head))