题目描述

描述转载自力扣《82. 删除排序链表中的重复元素 II》
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例1

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

示例2

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

解题思路

  1. 由于有可能头节点会被删除,所以我们需要定义一个哑结点 dummy 连接头节点的前面。
  2. 将 cur 指针指向 dummy,如果 cur.next 和 cur.next.next 的节点一致,说明从 cur.next 开始往后有重复元素,记录 cur.next 的值 repeat,使用 while 循环,直到值不为 repeat 为止,将 cur.next 指向这个位置。
  3. 如果 cur.next 不等于 cur.next.next,那么 cur = cur.next,cur 指针跳到下一节点。

Java 代码实现

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        ListNode dummy = new ListNode(Integer.MAX_VALUE);
        dummy.next = head;
        ListNode cur = dummy;
        while (cur.next != null && cur.next.next != null) {
            if (cur.next.val == cur.next.next.val) {
                int repeat = cur.next.val;
                while (cur.next != null && cur.next.val == repeat) {
                    cur.next = cur.next.next;
                }
            }
            else {
                cur = cur.next;
            }
        }
        return dummy.next;
    }
}