和上個題類似:給定乙個單鏈表,找出環開始的節點。
使用上乙個題目的演算法可以判斷出當前鍊錶有沒有環。
觀察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...