劍指Offer刷題筆記 刪除鍊錶中重複的結點

2021-09-25 21:37:48 字數 1750 閱讀 3804

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。 例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5

注意是把重複的所有結點都刪除。

思路:用乙個指標指向已經處理好的部分的結尾。另外兩個指標,一快一慢,找到重複的結點。

class solution:

def deleteduplication(self, phead):

# write code here

# 基準指標

ppre = none

# 慢指標

pcur = phead

# 快指標

pnext = none

while pcur != none:

# 有重複的結點

if pcur.next != none and pcur.val == pcur.next.val:

# 賦值快指標

pnext = pcur.next

# 讓快指標移動,直至找到數值不同的結點

while pnext.next != none and pnext.next.val == pcur.val:

pnext = pnext.next   # 推出迴圈的時候, pnext是最後乙個的重複結點。

# 如果頭結點就是重複的結點,頭節點也要移動。

if pcur == phead:

phead = pnext.next

# 否則的話,基準結點要指向目前數值不一樣的那個結點。

else:

ppre.next = pnext.next

# 慢指標同樣要移動到該位置

pcur = pnext.next

# 如果當前不重複,直接移動基準指標和慢指標

else:

ppre = pcur

pcur = pcur.next

return phead

class solution:

def deleteduplication(self, phead):

# 基準指標

ppre = none

# 慢指標

pcur = phead

# 快指標

pnext = none

while pcur != none:

# 有重複的結點

if pcur.next != none and pcur.val == pcur.next.val:

# 賦值快指標

pnext = pcur.next

# 讓快指標移動,直至找到數值不同的結點

while pnext.next != none and pnext.next.val == pcur.val:

pnext = pnext.next # 退出迴圈的時候, pnext是最後乙個的重複結點。

# 如果頭結點就是重複的結點,頭節點也要移動。

if pcur == phead:

phead = pnext.next

# 否則的話,基準結點要指向目前數值不一樣的那個結點。

else:

ppre.next = pnext.next

# 慢指標同樣要移動到該位置

pcur = pnext.next

# 如果當前不重複,直接移動基準指標和慢指標

else:

ppre = pcur

pcur = pcur.next

return phead

劍指Offer刷題 鍊錶

劍指 offer 18.刪除鍊錶的節點 難度簡單 給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。注意 此題對比原題有改動 示例 1 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的...

劍指offer刷題日記 鍊錶

鍊錶03 從尾到頭列印鍊錶 python 採用insert方法 class solution def printlist self,listnode if not listnode return result while listnode result.insert 0 listnode.val l...

《劍指offer》刷題(1)鍊錶

最近二刷 劍指offer 的題目,寫寫其中關於鍊錶的解題思路 劍指offer18題 需要兩個指標,pre儲存刪除節點的前驅指標,cur儲存要刪除節點的指標 public listnode deletenode listnode head,int val if cur null return dumm...