82. 删除排序链表中的重复元素 II
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
/**
* @param {ListNode} head
* @return {ListNode}
*/
var deleteDuplicates = function(head) {
// 边界
if (!head) {
return head;
}
// cur初始化节点应该是 这个链表之前
const dummy = new ListNode(0, head);
let cur = dummy;
// cur.next cur.next.next 存在
while(cur.next && cur.next.next) {
// 1-1-2-2-2-3
// cur.next指的的1这个节点
if (cur.next.val === cur.next.next.val) {
let x = cur.next.val;
// 如果一直有重复的
while (cur.next && cur.next.val === x) {
cur.next = cur.next.next; //一直删节点
}
} else {
cur = cur.next; // 没有重复的,往后遍历链表就可以
}
}
return dummy.next;
};
本文介绍了如何删除排序链表中所有重复的元素,保持链表升序排列。通过创建虚拟头节点简化边界条件,利用双指针技巧,当发现连续两个节点值相等时,跳过重复节点。最后返回虚拟头节点的下一个节点作为结果。此算法实现了高效地去除链表重复元素。
801

被折叠的 条评论
为什么被折叠?



