刪除鏈表中重復的結點_java
阿新 • • 發佈:2019-03-27
指針 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->519 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