Remove Duplicates from Sorted List leetcode java

愛做飯的小瑩子發表於2014-07-23

題目:

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

 

題解:

這道題是經典的雙指標問題,用兩個指標一前一後指向連結串列。如果兩個指標指向的值相等,那麼就讓第二個指標一直往後挪,挪到與第一個指標不同為止。然後讓第一個指標的next指向第二個指標,兩個指標同時往後挪,進行下面的操作。

需要注意,當list的結尾幾個node是重複的時候,例如1->2->3->3,那麼ptr2會指向null,需要特殊處理,令ptr1.next = null,這樣list尾部就不會丟。

其他情況就不用特殊處理結尾了,因為結尾沒有重複值,只須遍歷就夠了,不用特殊處理尾部。

 

程式碼如下: 

 

 1     public ListNode deleteDuplicates(ListNode head) {
 2         if(head == null || head.next == null)
 3             return head;
 4         
 5         ListNode ptr1 = head;
 6         ListNode ptr2 = head.next;
 7         
 8         while(ptr2!=null){
 9             if(ptr1.val == ptr2.val){
10                 ptr2 = ptr2.next;
11                 if(ptr2==null)
12                     ptr1.next = null;
13             }else{
14                 ptr1.next = ptr2;
15                 ptr1 = ptr1.next;
16                 ptr2 = ptr2.next;
17             }
18         }
19 
20         return head;
21     }

相關文章