鍊錶的環的入口結點

2021-08-06 04:47:26 字數 631 閱讀 4102

乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。

/*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 判斷乙個煉表裡是否有環時用到了一快一慢兩個指標,如果兩個指標相遇,表明鍊錶中存在環。兩...