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