讨论/题目交流/删除排序链表中的重复元素 II/
删除排序链表中的重复元素 II

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例 1:

输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:

输入: 1->1->1->2->3
输出: 2->3

展开讨论
共 2 个讨论

既然是排序的链表,一遍循环就够了。
判断下一个节点的值和当前节点是否相等,相等则删除下一个节点,如果不想等则移动到下一个节点继续比较,直到所有节点遍历完成即可。

var deleteDuplicates = function(head) {

    let dummy = new ListNode(0);
    dummy.next = head;
    
    let l = dummy;
    let r = dummy.next;
    
    while (r && r.next) {
        if (l.next.val === r.next.val) {
            while (l.next.val === r.next.val) {
                r = r.next;
                if (!r.next) break;
            }
            l.next = r.next;
        } else {
            l = l.next;
        }
        r = r.next;
    }
    return dummy.next;
};