面試題23 鍊錶中環的入口節點

2021-08-25 14:06:35 字數 1094 閱讀 2917

/*

* 面試題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...