1. 程式人生 > >刪除鏈表中重復的結點_java

刪除鏈表中重復的結點_java

指針 java value 頭指針 amp int algo listnode 一個

 1 package algorithms;
 2 
 3 /*
 4 public class ListNode {
 5    int val;
 6    ListNode next = null;
 7 
 8    ListNode(int val) {
 9        this.val = val;
10    }
11 }
12 */
13 
14 /*
15  * 
16  * 在一個排序的鏈表中,存在重復的結點,請刪除該鏈表中重復的結點,
17 重復的結點不保留,返回鏈表頭指針。(認真審題)
18 例如,鏈表1->2->3->3->4->4->5 處理後為 1->2->5
19 20 從頭遍歷整個鏈表 如果當前節點pNode的值與下一個節點相同 21 那麽他們就是重復的節點 需要被刪除 22 為了保證刪除之後的鏈表仍然是相連的 23 需要把當前節點的前一個節點pPreNode保存起來 24 循環的過程中確保pPreNode始終與下一個沒有重復的節點連接在一起 25 26 */ 27 28 public class DeleteDuplication { 29 public ListNode deleteDuplication(ListNode pHead) { 30 ListNode pPreNode = null
; 31 ListNode pNode = pHead; 32 while (pNode != null) { 33 ListNode pNext = pNode.next; 34 boolean needDelete = false; 35 if (pNext != null && pNext.val == pNode.val) 36 needDelete = true; 37 if (!needDelete) {
38 pPreNode = pNode; 39 pNode = pNode.next; 40 } else { 41 ListNode pDeleteNode = pNode; 42 int value = pDeleteNode.val; 43 while (pDeleteNode != null && pDeleteNode.val == value) { 44 pNext = pDeleteNode.next; 45 pDeleteNode = pNext; 46 } 47 if (pPreNode == null) 48 pHead = pNext; 49 else 50 pPreNode.next = pNext; 51 pNode = pNext; 52 } 53 } 54 55 return pHead; 56 } 57 }

刪除鏈表中重復的結點_java