LeetCode0142 環形鍊錶 II

2021-10-24 21:11:30 字數 1553 閱讀 9576

一. 題目

題目

示例

二. 方法一: 集合

解題思路

用集合儲存每乙個節點的位址值

如果位址值已經在集合中存在, 則該節點是環的第乙個節點, 返回該節點

如果遍歷到列表末尾, 則說明沒有環

解題**

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...