给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
方法一:
var deleteDuplicates = function(head) {
let p =head;
while (p && p.next) {
if(p.val===p.next.val){
p.next = p.next.next
} else {
p = p.next
}
}
return head
};
方法二:
var deleteDuplicates = function (head) {
let set = new Set(); // 使用Set保存遍历到的节点值
// 创建一个prev节点,用于指向当前遍历的节点,当出现重复节点时,可用其删除当前节点
let prev = new ListNode(null);
prev.next = head; // 开始遍历前,prev节点指向头结点
let curr = head; // 用于遍历链表
// 遍历链表
while (curr) {
// 如果节点的值已被保存过,则删除当前节点
if (set.has(curr.val)) {
// 将prev节点直接指向下一个节点,即可删除当前节点
prev.next = curr.next;
// 当前节点向前移动一位
curr = curr.next;
} else {
// 保存当前节点的值
set.add(curr.val);
// prev节点和当前节点都向前移动一位,继续遍历链表
prev = curr;
curr = curr.next;
}
}
// 返回头节点,即为返回新链表
return head;
};
方法三: