面試題 02 01 移除重複節點

2021-10-07 12:30:11 字數 1254 閱讀 7644

編寫**,移除未排序鍊錶中的重複節點。保留最開始出現的節點。

示例1:

輸入:[1, 2, 3, 3, 2, 1]

輸出:[1, 2, 3]

示例2:

輸入:[1, 1, 1, 1, 2]

輸出:[1, 2]

鍊錶長度在[0, 20000]範圍內。

鍊錶元素在[0, 20000]範圍內。

高階:

如果不得使用臨時緩衝區,該怎麼解決?

對給定的鍊錶進行一次遍歷,並用乙個雜湊集合(hashset)來儲存所有出現過的節點。

由於在大部分語言中,對給定的鍊錶元素直接進行「相等」比較,實際上是對兩個鍊錶元素的位址(而不是值)進行比較。

因此,我們在雜湊集合中儲存鍊錶元素的值,方便直接使用等號進行比較。

具體地,我們從鍊錶的頭節點 head 開始進行遍歷,遍歷的指標記為 pos。由於頭節點一定不會被刪除,因此我們可以列舉待移除節點的前驅節點,減少編寫**的複雜度。

class

listnode

:def

__init__

(self, x)

: self.val = x

self.

next

=none

class

solution

:def

removeduplicatenodes

(self, head: listnode)

-> listnode:

ifnot head:

return head

pos, occurred = head,

[head.val]

while pos.

next

: cur = pos.

next

if cur.val not

in occurred:

pos = pos.

next

else

: pos.

next

= pos.

next

.next

return head

時間複雜度:o(n),其中 n 是給定鍊錶中節點的數目。

空間複雜度:o(n)。在最壞情況下,給定鍊錶中每個節點都不相同,雜湊表中需要儲存所有的 n 個值。

面試題 02 01 移除重複節點

面試題 02.01.移除重複節點 使用set或者hash表,頭插法 本來想使用暴力的,但是暴力可以優化 氣泡排序的思想 漸漸擴大不重複的區域 definition for singly linked list.public class listnode class solution listnode...

面試題 02 01 移除重複節點

編寫 移除未排序鍊錶中的重複節點。保留最開始出現的節點 可以使用hash表來儲存鍊錶的值,遍歷鍊錶時檢視hash表裡面是否存在該值即可。definition for singly linked list.struct listnode class solution unordered set int...

面試題 02 01 移除重複節點

編寫 移除未排序鍊錶中的重複節點。保留最開始出現的節點。這題的關鍵在於不使用臨時的緩衝區,使用暴力法是可以解決的 如下 class solution else head head.next return rs 這題有官方的解析,看了一下,關於不使用額外空間的方法,官方也是暴力演算法做的,至於使用的則...