python實現從無序的鍊錶中刪除重複項

2021-10-08 15:25:53 字數 1816 閱讀 3384

題目描述:

給定乙個沒有排序的鍊錶,去掉其重複項, 並保留原順序,例如鍊錶 1 >3 >1一》5一》5->7,

去掉重複項後變為 l一》3一》5->7。

**分析與解答:**順序刪除

主要思路為 :

通過雙重迴圈直接在鍊錶上進行刪除操作 。 外層迴圈用乙個指標從第乙個 結點開始遍歷整個鍊錶,然後內層迴圈用另外乙個指標遍歷其餘結點 , 將與外層迴圈遍歷到 的指標所指結點的資料域相同的結點刪除。如下圖所示 :

假設外層迴圈從 outercur 開始遍歷,當內層迴圈指標 innercur 遍歷到上圖實線所示 的位 置( outercur.data= =innercur.data)時 , 需要把 innercur 指向的結點刪除。具體步驟如 下:

cl)用 tmp記錄待刪除的結點的位址。

(2)為了能夠在刪除 tmp 結點後繼續遍歷鍊錶中其餘的結點,使 innercur指向它的後繼 結點 :由iercur=innercur.next。

(3) 從鍊錶中刪除tmp結點。 實現**如下:

class lnode:

def __init__(self,x):

self.data=x

self.next=none

def removedup(head):

if head==none or head.next==none:

return

outcur=head

incur=none

incurpre=none

while outcur!=none:

incur=outcur.next

incurpre=outcur

while incur!=none:

if incur.data==outcur.data:

incurpre.next=incur.next

incur=incur.next

else:

incurpre=incur

incur=incur.next

outcur=outcur.next

if __name__=='__main__':

i=1head=lnode(0)

head.next=none

temp=none

cur=head

while i<7:

tmp=lnode(0)

if i%2==0:

tmp.data=i+1

elif i%3==0:

tmp.data=i-2

else:

tmp.data=i

tmp.next=none

cur.next=tmp

cur=tmp

i+=1

print('刪除重複節點前:')

cur=head.next

while cur!=none:

print(cur.data)

cur=cur.next

removedup(head)

print('刪除節點後:')

cur=head.next

while cur!=none:

print(cur.data)

cur=cur.next

輸出:

刪除重複節點前:13

1557

刪除節點後:13

57

從無序鍊錶中移除重複項

題目描述 實現從無序鍊錶中移除重複項,並保持原有順序 head 0 5 3 2 4 3 1 0 head 0 5 3 2 4 1 解題思路 1.從第乙個元素開始,遍歷鍊錶比較重複元素並刪除重複元素 雙重迴圈 2.空間換時間 hashset判斷是否有該節點 hash方法和equals方法的作用 pub...

python 實現無序鍊錶

一 鍊錶的概念 二 python實現 1 定義乙個node類 class node object def init self,val self.data val self.next none def get data self return self.data def set data self,v...

如何從無序鍊錶中移除重複項 Java版

題目描述 給定乙個沒有排序的鍊錶,去掉其重複項,並保留原順序,如鍊表1 3 1 5 5 7,去掉重複項變為1 3 5 7。方法一 順序刪除 思路 通過雙重迴圈直接在鍊錶上執行刪除操作。外層迴圈用乙個指標從第乙個節點開始遍歷整個鍊錶,然後內層迴圈用另乙個指標遍歷其餘節點,將與外層迴圈遍歷到的指標所指節...