劍指offer 刪除鍊錶中重複的結點

2021-09-26 16:00:57 字數 1784 閱讀 9752

題目描述

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

solution

不保留重複節點:使用輔助節點,注意node.next的判斷。

首先新增乙個頭節點,以方便碰到第乙個,第二個節點就相同的情況

設定 pre ,last 指標, pre指標指向當前確定不重複的那個節點,而last指標相當於工作指標,一直往後面搜尋。

class

listnode

:def

__init__

(self, x)

: self.val = x

self.

next

=none

class

solution

:def

deleteduplication

(self, phead)

:if phead is

none

or phead.

next

isnone

:return phead

newhead = listnode(-1

) newhead.

next

= phead

pre = newhead

last = pre.

next

# 待刪除的節點直接跳過了,1->2->2->3後結果為1->3 2節點沒有釋放記憶體

while last is

notnone

:if last.

next

isnot

none

and last.val == last.

next

.val:

while last.

next

isnot

none

and last.val == last.

next

.val:

last = last.

next

pre.

next

= last.

next

last = last.

next

else

: pre = last

last = last.

next

return newhead.

next

另乙個題型,保留乙個重複的節點:不使用輔助頭節點。

class

solution

:def

deleteduplication

(self, phead)

:if phead is

none

:return

none

p1, p2 = phead, phead.

next

while p2 is

notnone

:if p2.val == p1.val:

tmp = p2

p2 = p2.

next

del tmp

p1.next

= p2

else

: p1 = p2

p2 = p2.

next

p1.next

= p2

return phead

劍指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...

劍指Offer 鍊錶 刪除鍊錶中重複的結點

題目 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5。注意該鍊錶為排序鍊錶,重複的節點不保留哦!public class listnode 1 遞迴 遞迴的方法就像是先判斷第乙個節點和之後的節...