乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。
/*struct listnode
};*/
/** 資料快慢指標:
判斷是否有環就不解釋了,下面主要解釋,為什麼可以那樣找環入口。
⬇️<-<-<-⬆️
⬇️ ⬆️
♦️->->->⬇️->->->⬆️
a b c
只是個簡單圖,就不專門做圖了,湊合表示下吧。
♦️也就是a的位置是頭節點,b表示環入口處,c表示快慢指標第一次相遇處。
在c處相遇時,設慢指標跑了n步,也就是從a開始n步後會到達c。
快指標比慢指標走的快一倍,也就是走了2*n步。那麼慢指標從c處再跑n步還會回到c處。
既然都會回到c處,那麼必然會在b點第一次相遇。
所以我們在入口處再設一指標(用之前快指標即可),與慢指標用1步長同時前進,第一次相遇處就是環入口處。
運動是相對的,快指標相對於慢指標,就相當於慢指標靜止,快指標每次移動一步。這樣只要是在環中,快指標肯定會與慢指標相遇。
*/class solution
if(last==beg)
return last;}}
return null; }};
鍊錶環的入口結點
如果乙個鍊錶包含環,如何找出環的入口結點?單鏈表只有乙個指標域,所以環的話一定是後半部分成環或者是一整個。關於這種鍊錶問題,一般都是可以用雙指標來解決。首先考慮特殊情況,不是環 雙指標 鍊錶為none。1.通過pre和latter兩個指標,同時走,pre的速度是latter的兩倍,如果pre小於等於...
鍊錶中的環的入口結點
學習內容 鍊錶中的環的入口結點 1 思路 如果鍊錶是乙個空鍊錶,或者只有乙個結點的鍊錶,答案是null。如果鍊錶是至少有兩個結點的線性鍊錶,那麼答案也是null。如果鍊錶包含環,那麼入口結點的位址一定出現且僅出現兩次。特別情況就是整個鍊錶是個環,那麼入口結點是這個單鏈表的第乙個結點。要找到整個鍊錶中...
8 找出鍊錶環的入口結點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。struct listnode class solution 鍊錶中有環的解釋 參考 上圖中的第二個示例圖p2改為p1。環中結點的數目 1 判斷乙個煉表裡是否有環時用到了一快一慢兩個指標,如果兩個指標相遇,表明鍊錶中存在環。兩...