leetcode刷題5 找出鍊錶中環的位置

2021-06-21 16:32:19 字數 1103 閱讀 2117

和上個題類似:給定乙個單鏈表,找出環開始的節點。

使用上乙個題目的演算法可以判斷出當前鍊錶有沒有環。

觀察1:

如果在快慢指標相遇後,我們繼續向前移動慢指標,直到再次相遇,就可以計算出環的長度。

觀察2:

使用乙個指標遍歷鍊錶時,從環開始,經過環的長度次前進,指標會重新指向環開始的位置(從觀察1可以很快得出)

觀察3:

如果使用兩個指標一前一後,假設環的長度為n,前面的指標前進n步之後,後面指標開始前進,則兩個指標再次相遇的時候,就是環開始的位置。

綜上,根據之前題目的演算法可以得到**:

class solution:

def detectcycle(self,head):

if head == none:

return none

if head.next == none:

return none

if head.next == head:

return head

fast = head.next.next

slow = head.next

while fast != none and slow != none:

if fast == slow:

flag = true

step = 1

slow=slow.next

while slow!=fast:

slow=slow.next

step +=1

front=rear=head

while step!=0:

step-=1

front=front.next

while front!=rear:

front = front.next

rear = rear.next

return front

if fast.next == none:

return none

fast = fast.next.next

slow = slow.next

# if exist, won't pass through while loop at all.

return none

leetcode刷題 鍊錶篇

class solution return result class solution class solution return cura 注 思路 相交節點到尾部的節點數是一樣的,所以當cura遍歷到尾部時,再從headb開始遍歷,同當curb遍歷到尾部時,再從heada開始遍歷,他們指標相遇時...

Leetcode刷題鍊錶之環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。定義兩個指標,從頭節點開始,兩個指標都向右移動,但是設定他們的移動速度不一樣,如果為環形鍊錶,則指標肯定會相遇。若為直鏈表,兩個指標至少有乙個為空。definition for singly linked list.class listnode public cla...

Leetcode鍊錶刷題 pytho語言

為方便後續的使用查詢,記錄一下 函式包括 找到兩個單鏈表相交的起始節點 反轉單鏈表 刪除鍊錶中等於給定值 val 的所有節點 definition for singly linked list.class listnode object def init self,x self.val x self...