乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。要求不能使用額外的空間。
使用雙指標,乙個指標 fast 每次移動兩個節點,乙個指標 slow 每次移動乙個節點。因為存在環,所以兩個指標必定相遇在環中的某個節點上。假設相遇點在下圖的 z1 位置,此時 fast 移動的節點數為 x+2y+z,slow 為 x+y,由於 fast 速度比 slow 快一倍,因此 x+2y+z=2(x+y),得到 x=z。
在相遇點,slow 要到環的入口點還需要移動 z 個節點,如果讓 fast 重新從頭開始移動,並且速度變為每次移動乙個節點,那麼它到環入口點還需要移動 x 個節點。在上面已經推導出 x=z,因此 fast 和 slow 將在環入口點相遇。
c++:
1/*2struct listnode 8};
9*/10class
solution while(fast !=slow) ;
22 fast =phead ;
23while(fast !=slow)
27return
fast ;28}
29 };
鍊錶中環的入口結點
乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。class listnode public class solution return p1 return null 分析 假設鍊錶的起始點到環的入口點節點數為k,環的的節點數為x,讓p2的速度是p1的兩倍,p1和p2相遇在環的第y各節點,可以得到如下等...
鍊錶中環的入口結點
題目要求 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點 分析 1 一種比較偷懶的方法就是遍歷鍊錶,並直接利用hashmap來儲存已經遍歷過的結點。一旦發現已經儲存過的結點,那麼該結點就是環的入口結點。2 參考自 我簡單畫了乙個圖 上傳之後一直是橫過來的。不知道為什麼轉不正 設定兩個指標p1和p2,乙...
鍊錶中環的入口結點
題目描述 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路1 設環中結點數是n,環的入口位置是x 距離起點走多少步 用快慢指標p,q,q移動的速度是p的2倍,當兩個指標相遇時p走的步數是y,q走的步數是2y,q比p多走k個環的距離,即 2y y kn,則y kn。p距離環的入口點的距離為y x,此...