題目描述:
給定乙個沒有排序的鍊錶,去掉其重複項,並保留原順序,如鍊表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...