乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。
思路:第一步,找環中相匯點。分別用slow,fast指向鍊錶頭部,slow每次走一步,fast每次走二步,直到slow==fast找到在環中的相匯點。
第二步,找環的入口。接上步,當slow==fast時,fast所經過節點數為2x,slow所經過節點數為x,設環中有n個節點,fast比slow多走一圈有2x=n+x; n=x;可以看出slow實際走了乙個環的步數,再讓fast指向鍊錶頭部,slow位置不變,slow,fast每次走一步直到slow==fast; 此時slow指向環的入口。
listnode* entrynodeofloop(listnode*phead)return
slow;}}
else
}return
null;
}
判斷乙個鍊錶中環的入口位置
乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路 通過141題,我們知道可以通過快慢指標來判斷是否有環,現在我們假設兩個指標相遇在z點,如圖 那麼我們可以知道fast指標走過a b c b slow指標走過a b 那麼2 a b a b c b 所以a c 那麼此時讓slow回到起點,fast依然...
鍊錶中環的入口
題目描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。思路 之前我們判斷鍊錶是否有環,用兩個指標,快慢指標,乙個走一步,乙個走兩步,在此基礎上,當兩個指標相遇,此時肯定在環中,那麼接著計算環的節點數,就利用相遇節點往前走,直到在次回到相遇點,即可計算環的節點數n,然後利...
鍊錶 鍊錶中環的入口結點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。知識點回顧 快慢指標 思路 使用快慢指標 假設有p,q兩指標,p每步跨乙個結點,q每步跨兩個結點。那麼經過k步之後q比p多走過的結點數為k。如果鍊錶中沒有環,那麼q永遠在p的前面,兩指標不會相遇。如果鍊錶有環,且環中結點個數為...