/** 面試題23
:鍊錶中環的入口節點
* 題目:給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出
null
* 思路:定義快慢兩個指標,相遇後(環中相匯點)將快指標指向
phead
然後一起走,每次往後挪一位,相遇的節點即為所求。
* 詳細分析:相遇即
p1==p2
時,p2
所經過節點數為
2x,p1
所經過節點數為
x,設環中有
n個節點
,p2比
p1多走一圈有
2x=n+x; n=x;
* 可以看出
p1實際走了乙個環的步數,再讓
p2指向鍊錶頭部,
p1位置不變,
p1,p2
每次走一步直到
p1==p2;
此時p1
指向環的入口。
*/publicclassno23entrynodeofloop
publiclistnode entrynodeofloop(listnode
phead)
//定義快慢兩個指標
listnode
slow
= phead;
listnode
fast
= phead;
//當fast
指標不為空
while(
fast
!=null&&
fast
.next
!=null)
//相遇的節點即為所求
if(
fast
== slow)
} }
returnnull; }
}
面試題23 鍊錶中環的入口節點
一 判斷該鍊錶是否有環 使用雙指標,前指標走得快,後指標走得慢,如果有環,前指標能夠在後面追上慢指標 include struct listnode listnode meetingnode listnode phead return nullptr 二 找到環的入口 計算得到環的節點數 將指標1前...
面試題23 鍊錶中環的入口節點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。考察點 鍊錶 魯棒性 分析問題。思路 1.首先判斷鍊錶中有環,用兩個指標標記頭結點,乙個指標增速為1,乙個指標增速為2,如果慢指標可以追上快指標 環存在。2.其次,就是求得環中存在多少個節點,用迴圈判斷,回到原始節點就統計出來...
面試題23 鍊錶中環的入口節點
考察鍊錶的操作,找到單向鍊錶中環的入口節點 c 版 include include using namespace std 定義鍊錶 struct listnode 在鍊錶存在環的前提下找到一快一慢兩個指標相遇的節點 listnode meetingnode listnode phead retur...