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

版权声明:版权所有,转载请注明原网址链接。 https://blog.csdn.net/qq_41231926/article/details/82963136

我的LeetCode代码仓:https://github.com/617076674/LeetCode

原题链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/description/

题目描述:

知识点:链表

思路:三指针遍历链表

为了消除对头节点的特殊处理,设立虚拟头节点dummyHead。cur1指针指向当前节点的前一个节点,cur2指针指向当前节点,cur3指针指向当前节点的后一个节点。

只要cur3不为null就持续以下循环:

如果cur3的值和cur2的值相同,需要循环使得cur3 = cur3.next,直至cur3的值和cur2的值不相等为止。如果在这个循环过程中cur3为null了,直接舍弃cur2指针及其后面的所有节点即可。否则需要进行三个指针的重定向操作。

如果cur3的值和cur2的值不相同,只需继续遍历下一个节点即可。

时间复杂度是O(n),其中n为链表的长度。空间复杂度为O(1)。

JAVA代码:

public class Solution {

    public ListNode deleteDuplicates(ListNode head) {
        if(head == null || head.next == null){
            return head;
        }
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next = head;
        ListNode cur1 = dummyHead;
        ListNode cur2 = cur1.next;
        ListNode cur3 = cur2.next;
        while(cur3 != null){
            if(cur2.val != cur3.val){
                cur1 = cur2;
                cur2 = cur3;
                cur3 = cur3.next;
            }else {
                while (cur2.val == cur3.val) {
                    cur3 = cur3.next;
                    if (cur3 == null) {
                        cur1.next = null;
                        return dummyHead.next;
                    }
                }
                cur1.next = cur3;
                cur2 = cur3;
                cur3 = cur3.next;
            }
        }
        return dummyHead.next;
    }
}

LeetCode解题报告:

猜你喜欢

转载自blog.csdn.net/qq_41231926/article/details/82963136
今日推荐