乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。
若該鍊錶存在環,設定兩個指標pslow和pfast,pslow每次走一步,pfast每次走兩步,當pfast追上pslow的時候,pfast比pslow多走的正好是pslow走的也就是環所包含的節點的個數。
所以,第二次走,乙個從頭結點開始,另乙個從相遇節點開始,最終會在環的入口節點相遇
/*
public class listnode }*/
public class solution
listnode pslow = phead;
listnode pfast = phead;
do pslow = pslow.next;
pfast = pfast.next;
if (pfast.next == null)
pfast = pfast.next;
} while (pslow != pfast);
pslow = phead;
while (pslow != pfast)
return pslow;
}}
劍指offe55 鍊錶中環的入口結點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。做這個題之前,我們應該先明白鍊錶有環是什麼的樣的情況,理解的什麼鍊錶中有環的樣子,我們就可以來理解這個題的思路的。這個題分兩步 1 先定義兩個節點p1,p2,分別指向鍊錶的頭結點,我們讓p2每次移動兩個節點,讓p1每次移動乙個...
劍指Offer 鍊錶中環的入口結點
第一步 先找到環中的乙個點 第二步 確定環中有幾個元素,比如n個 第三步 讓第乙個指標先走n步,第二個指標再從頭走,兩指標相遇即為入口結點 class solution def entrynodeofloop self,phead write code here meetingnode self.m...
劍指offer 鍊錶中環的入口結點
假設x為環前面的路程 黑色路程 a為環入口到相遇點的路程 藍色路程,假設順時針走 c為環的長度 藍色 橙色路程 當快慢指標相遇的時候 此時慢指標走的路程為sslow x m c a 快指標走的路程為sfast x n c a 2 sslow sfast 2 x m c a x n c a 從而可以推...