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


本题是leetcode,地址:82. 删除排序链表中的重复元素 II

题目

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

示例 1:

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

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

分析

这道题看似简单,但还是有一些特殊情况需要考虑的。

比如,第一个节点和后面的重复,第一个节点也不能保留;中间连续几个都相同时,需要一直往后迭代;

基于这两点,我们需要构造一个哑节点;同时处理好连续相同的情况;

code

    public ListNode deleteDuplicates(ListNode head) {
        if(head == null) return null;

        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        
        ListNode left = dummy;
        ListNode right = head;

        while(right != null && right.next != null) {
            int v = right.next.val;
            if(v != left.next.val) {
                left = left.next;
            } else {
                //如果left、right指向的节点值相等,就不断移动right,直到left、right指向的值不相等 
                while(right!=null && right.next!=null && left.next.val==right.next.val) {
                    right = right.next;
                }
                left.next = right.next;
            }
            right = right.next;
        }
        return dummy.next;
    }

你的鼓励也是我创作的动力

打赏地址

posted @ 2020-07-25 14:22  Yangsc_o  阅读(123)  评论(0编辑  收藏  举报