題目描述:在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。 例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5
解題思路:1、雙指標:
由於該鍊錶是有序的,因此重複節點一定是連在一起的。同時考慮到頭指標phead
是重複節點的情況,可以人為地增加乙個頭節點head
,然後將頭指標連在一起:head.next = phead
。採用快慢指標的做法,初始化指標pre = head,cur = phead
,當cur.val == cur.next.val
時,不斷地更新cur
指標,找到重複指標的最後乙個指標的下乙個指標:cur = cur.next
,然後使用pre.next = cur
刪除這些重複節點;否則更新cur
和pre
指標,重複上述過程直至cur
或者cur.next
為空。整個過程也可以使用基於遞迴實現。
實現**:
//刪除有序鍊錶中重複的節點
//解法1:雙指標
public listnode deleteduplication
(listnode phead)
else
}return head.next;
}//解法2:基於遞迴
public listnode deleteduplication1
(listnode phead)
else
}
劍指Offer 鍊錶 刪除鍊錶的節點
給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點,返回刪除後的鍊錶的頭節點。解題思路 演算法流程 複雜度分析 實現 definition for singly linked list.class listnode def init self,x self.val x self.ne...
劍指offer 鍊錶 刪除鍊錶中的重複節點
題目在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 思路分析 思路一 使用linkedlist儲存不重複節點,重構鍊錶 分析評價 這個方法是乙個比較直接且容易想到的方法,使用時只要注意一些情況...
劍指offer 刪除鍊錶中重複的結點(鍊錶)
在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 class solution listnode ans newlistnode 1 ans next phead listnode link a...