删除排序链表中的重复元素 II

87 阅读1分钟

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

 

示例 1:

输入: head = [1,2,3,3,4,4,5]
输出: [1,2,5]

示例 2:

输入: head = [1,1,1,2,3]
输出: [2,3]

提示:

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序 排列
class Solution {
    public ListNode deleteDuplicates(ListNode head) {

        Set<Integer> all = new HashSet<>();
        Set<Integer> repeat = new HashSet<>();
        ListNode p = new ListNode(0,head);
        head = p;
        while (null != p.next){
            if(all.contains(p.next.val)){
                repeat.add(p.next.val);
            }
            all.add(p.next.val);
            p = p.next;
        }
        p = head;
        // 1,2,3,3,4,4,5
        while (null != p.next){
            if(repeat.contains(p.next.val)){
                p.next = p.next.next;
                continue;
            }
            p = p.next;
        }
        return head.next;
    }
}

注意 head 指的就是第一个节点**,**并不是一个空的头节点