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

2021-09-12 23:14:39 字數 1420 閱讀 8676

題目描述:

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

方法一:順序刪除

思路:通過雙重迴圈直接在鍊錶上執行刪除操作。外層迴圈用乙個指標從第乙個節點開始遍歷整個鍊錶,然後內層迴圈用另乙個指標遍歷其餘節點,將與外層迴圈遍歷到的指標所指節點的資料域相同的節點刪除(刪除的是內層迴圈的節點)。

/**

* definition for singly-linked list.

* public class listnode

* }*/class

solution

listnode outercur = head;

//用於外層迴圈,指向鍊錶第乙個節點

listnode innercur = null;

//內層迴圈用來遍歷outercur後面的節點

//一旦涉及節點刪除,那麼就要找到該節點的前驅節點

listnode innerpre = null;

//innercur的前驅節點

for(

; outercur != null; outercur = outercur.next)

else}}

return head;

}}

演算法效能分析:由於這種方法採用雙重迴圈對鍊錶進行遍歷,因此,時間複雜度為o(n^2)。其中,n為鍊錶的長度。在遍歷鍊錶的過程中,使用了常量個額外的指標變數來儲存當前遍歷的節點、前驅節點和被刪除的節點,因此,空間複雜度為o(1)

方法二:遞迴法

思路:對於節點cur,首先遞迴的刪除以cur.next為首的子鍊錶中重複的節點,接著從以cur.next為首的子鍊錶中找出與cur有著相同的資料域的節點並刪除。

/**

* definition for singly-linked list.

* public class listnode

* }*/class

solution

//對以head.next為首的子鍊錶刪除重複的節點

head.next =

deleteduplicates

(head.next)

;//找出以head.next為首的子鍊錶中與head節點相同的節點並刪除

if(head.val == head.next.val)

return head;

}}

從無序鍊錶中移除重複項

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

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

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

無序鍊錶去除重複項

def listflushbyset inputlist 集合去重 newlist list set inputlist print newlist 空間換時間 def flushlist inputlist objlist for i in range 0,len inputlist length...