給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。
令p1和p2指向頭節點,p1一次走一步,p2一次走2步。
1.找相遇點
2.找環入口
如圖:p1,p2在c點相遇。 p2=2p1
設abc=x,abcbc=2x.(肯定是p1走到c時,p2已經走了一圈了,p2比p1快一倍)
p1,p2共同走的是abc,即abcbc(p2走的路)-abc(p1走的路)=cbc(乙個環的距離)=2x-x=x。
因為abc=cbc=x,所以我們知道abc的距離就相當於乙個環。abc和cbc的共同距離是bc這一段,所以ab=cb。
走到相遇點時,我們讓p2重新指向頭節點,p1在相遇點不動,當兩個指標再次相遇的時候就是環的入口了。
/*
public class listnode }*/
public class solution
//令p2重新指向頭節點
p2 = phead;
//當p1和p2不相等,即沒到環入口時
while(p1 != p2)
return p1;}}
鍊錶中環的入口結點
乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。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,此...