面试题 02.01. 移除重复节点
生活随笔
收集整理的這篇文章主要介紹了
面试题 02.01. 移除重复节点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Title
編寫代碼,移除未排序鏈表中的重復節點。保留最開始出現的節點。
示例1:
輸入:[1, 2, 3, 3, 2, 1]
輸出:[1, 2, 3]
示例2:
輸入:[1, 1, 1, 1, 2]
輸出:[1, 2]
提示:
鏈表長度在[0, 20000]范圍內。
鏈表元素在[0, 20000]范圍內。
進階:
如果不得使用臨時緩沖區,該怎么解決?
哈希表
Solve
對給定的鏈表進行一次遍歷,并用一個哈希集合(HashSet)來存儲所有出現過的節點。
由于在大部分語言中,對給定的鏈表元素直接進行「相等」比較,實際上是對兩個鏈表元素的地址(而不是值)進行比較。
因此,我們在哈希集合中存儲鏈表元素的值,方便直接使用等號進行比較。
具體地,我們從鏈表的頭節點 head 開始進行遍歷,遍歷的指針記為 pos。由于頭節點一定不會被刪除,因此我們可以枚舉待移除節點的前驅節點,減少編寫代碼的復雜度。
Code
class ListNode:def __init__(self, x):self.val = xself.next = Noneclass Solution:def removeDuplicateNodes(self, head: ListNode) -> ListNode:if not head:return headpos, occurred = head, [head.val]while pos.next:cur = pos.nextif cur.val not in occurred:occurred.append(cur.val)pos = pos.nextelse:pos.next = pos.next.nextreturn head復雜度分析
時間復雜度:O(N),其中 N 是給定鏈表中節點的數目。
空間復雜度:O(N)。在最壞情況下,給定鏈表中每個節點都不相同,哈希表中需要存儲所有的 N 個值。
總結
以上是生活随笔為你收集整理的面试题 02.01. 移除重复节点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: G6 图可视化引擎——核心概念——节点/
- 下一篇: 41. First Missing Po