一. 題目
題目
示例
二. 方法一: 集合
解題思路
用集合儲存每乙個節點的位址值
如果位址值已經在集合中存在, 則該節點是環的第乙個節點, 返回該節點
如果遍歷到列表末尾, 則說明沒有環
解題**
def
detectcycle
(self, head: listnode)
-> listnode:
res =
set(
)while head:
ifid
(head)
in res:
return head
else
: res.add(
id(head)
) head = head.
next
return
none
分析
時間複雜度: o(n)
空間複雜度: o(n)
三. 方法二: 快慢指標
解題思路
然後現在的關鍵問題是如何找到相遇的第乙個節點
**分析
所以我們再從相遇節點和煉表頭同步移動, 相遇時即為環的第乙個節點
解題**
def
detectcycle
(self, head: listnode)
-> listnode:
ifnot head or
not head.
next
:return
none
slow = head
fast = head
while
true:if
not fast or
not fast.
next
:return
none
slow = slow.
next
fast = fast.
next
.next
if slow == fast:
break
slow = head
while slow != fast:
slow = slow.
next
fast = fast.
next
return slow
分析時間複雜度: o(n)
空間複雜度: o(1)
141 環形鍊錶 LeetCode
給定乙個鍊錶,判斷鍊錶中是否有環。如果鍊錶中有某個節點,可以通過連續跟蹤 next 指標再次到達,則鍊錶中存在環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。注意 pos 不作為引數進行傳遞,僅僅是為了標識...
LeetCode題解 141 環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。高階 你能否不使用額外空間解決此題?輸入 1 no cycle,輸出false 輸入 1,2 no cycle,輸出false 輸入 3,0,2,4 tail connects to node index 1,輸出true.我們首先畫一下如果鍊錶存在環的情況,如下圖...
LeetCode筆記 141環形鍊錶
題目 給定乙個鍊錶,判斷鍊錶中是否有環。高階 你能否不使用額外空間解決此題?思路 我本來自己想的是在環形鍊錶中。每乙個節點的下乙個節點都不可能為空。若為空的話返回false 若不為空的話,繼續迴圈,知道迴圈次數等於鍊錶的個數。實際上鍊表中的節點個數並不已知,所以該方法不可以。然後就直接看了leetc...