思路:(一開始不會,看了其他網友的才自己弄明白的)
該圖**於
先設兩個指標,乙個快指標(每次走兩步),乙個慢指標(每次走一步)。
2. 兩個指標都從頭結點開始走,假設兩點在某點相遇。此時慢指標走了w+y步,快指標走了w+y+n(正好比慢指標多走了一圈)或者w+y+xn步(和慢指標相遇時快指標已經走了x圈)。由2(w+y)=w+y+n得n=w+y,或由2(w+y)=w+y+xn得xn=w+y.
3. 讓慢指標從頭結點開始走,讓快指標從相遇結點開始走,(補充一下,此時快慢指標每次都走一步)直到相遇結點即為入口結點。
/*struct listnode
};*/
class
solution
listnode* fp = phead; //
快指標,每次走兩步
listnode* sp = phead; //
慢指標,每次走一步
while(fp->next!=null && fp->next->next!=null)
return
fp; }
}return
null;}};
劍指offer 55 鍊錶中環的入口結點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。找環的入口這個問題,其實是建立在另外乙個問題之上的 判斷單向鍊錶是否有環 土方法很多,但是比較好的目前就那麼乙個 一開始設定兩個指標都指向表頭,其中乙個每次 一步 前進乙個節點的叫p1,另外那個每次 一步 前進兩個節點的叫p2...
劍指offer55 鍊錶中環的入口結點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。設定塊 慢指標,快指標沒次走兩步,慢指標每次走一步,如果有環,它們一定會相遇 否則快指標會先到最後。相遇後選乙個指標在頭結點,然後與慢指標同時移動,相遇位置就為環入口 走一步和兩步 while slow fast if fas...
劍指offer 55 鍊錶中環的入口結點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。時間限制 1秒 空間限制 32768k 熱度指數 144136 本題知識點 鍊錶 見 struct listnode class solution while slow fast 2.計算環內長度 int l 0 dowhil...