Leetcode142,尋找環狀鍊錶入環點

2022-06-30 06:36:12 字數 710 閱讀 6990

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回null

判斷是否有環,可以使用set集合,但是它是無序的,所以不能確定入環位置的下標,所以要使用快慢指標法。

如圖示1所示,假設從起始點到入環點距離為a,當慢指標走到入環點的時候,快指標走了2a,(因為快指標走兩步,慢指標走一步),假設從2a位置到入環點距離為x。

圖示二所示,當x步後,快慢指標相遇,此時,相遇點與入環點距離為a。此時,宣告第三個節點,位置在起始點,第三節點和慢指標每次走一步,a次之後,則在入環點相遇。

public listnode detectcycle2(listnode head) 

listnode fast = head.next.next;

listnode slow = head;

while(slow != fast)

fast = fast.next.next;

slow = slow.next;

}//程式執行到此,代表fast = slow

listnode newnode = head;

while(slow != newnode)

return newnode;

}

LeetCode142關於快慢指標

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。示例 1 輸入 head 3,2,0,4 pos 1 輸出...

LeetCode142之環形鍊錶II

一 題目 二 一種解題思路 方法介紹一 龜兔賽跑法公升級版 方法解析 使用龜兔賽跑法先判斷當前鍊錶是否存在環 快慢指標能夠相遇,則存在環 假設鍊錶頭部到環起點的距離為x,環的長度為y,快指標每次走兩步,慢指標每次走一步,慢指標走t步後與快指標相遇,相遇的位置是 t x y x 2 t x y x,求...

leetcode 142 環形鍊錶

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回null。說明 不允許修改給定的鍊錶。思路 首先通過快慢指標的方法判斷鍊錶是否有環 接下來如果有環,則尋找入環的第乙個節點。具體的方法為,首先假定鍊錶起點到入環的第乙個節點a的長度為a 未知 到快慢指標相遇的節點b的長度為 a b 這個...