LeetCode082——刪除排序連結串列中的重複元素II
阿新 • • 發佈:2018-12-14
題目描述:
知識點:連結串列
思路:三指標遍歷連結串列
為了消除對頭節點的特殊處理,設立虛擬頭節點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解題報告: