題目描述
在一個排序的鏈表中,存在重復的結點,請刪除該鏈表中重復的結點,重復的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理后為 1->2->5
算法解析: 我們從頭到尾遍歷整個鏈表,如果當前結點值和下一結點值相同,就都可以刪除,但我們需要將之前的結點保存下來,用于保證鏈表不會在刪除的過程中斷開,當然需要注意的是,如果需要刪除的結點包括頭結點,那么我們需要實時更新頭結點。
代碼如下:
public ListNode deleteDuplication(ListNode pHead) { if (pHead == null){ return null; } ListNode temp = pHead; ListNode PReNode = null; while (temp != null){ ListNode pNext = temp.next; boolean needDelete = false; if (pNext != null && pNext.val == temp.val){ needDelete = true; } if (!needDelete){ preNode = temp; temp = temp.next; }else{ int value = temp.val; ListNode pToBeDel = temp; while (pToBeDel != null && pToBeDel.val == value){ pNext = pToBeDel.next; pToBeDel = pNext; } if (preNode == null){ pHead = pNext; }else { preNode.next = pNext; } temp = pNext; } } return pHead; }新聞熱點
疑難解答