1. 程式人生 > >LeetCode082——刪除排序連結串列中的重複元素II

LeetCode082——刪除排序連結串列中的重複元素II

題目描述:

知識點:連結串列

思路:三指標遍歷連結串列

為了消除對頭節點的特殊處理,設立虛擬頭節點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解題報告: