存在一个按升序排列的链表,给你这个链表的头节点 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
  • 题目数据保证链表已经按升序排列
Related Topics
  • 链表
  • 双指针
  • \n
  • 👍 684
  • 👎 0
  • 题解

    和之前一题LeetCode刷题 【83】 删除排序链表中的重复元素略有不同,这次需要删除的不再是多余的重复元素,而是所有有重复元素的都删除,只留下在原来链表中只出现过一次的节点。

    和官方题解思路有点点点不一样的地方。。

    class Solution {
        public ListNode deleteDuplicates(ListNode head) {
    
            ListNode fakeHead = new ListNode();
            ListNode fakeCurrent = fakeHead;
    
            ListNode current = head;
            int sameVal;
            while (null != current){
                if (current.next!=null && current.val == current.next.val){
                    sameVal = current.val;
                    while (null!=current && current.val == sameVal){
                        current = current.next;
                    }
                }else{
                    fakeCurrent.next = current;
                    current = current.next;
                    fakeCurrent = fakeCurrent.next;
                }
            }
            fakeCurrent.next = null;
            return fakeHead.next;
        }
    }

    新建了一个fakeHead,和对应这个fakeHead往后遍历的fakeCurrent,然后在遍历原链表的时候,用这个fakeCurrent串起来需要的不重复的节点,最终需要把fakeCurrent的next置空。串珠子的意思。。。