劍指offer 23 鍊錶中環的入口節點

2021-10-06 05:25:03 字數 964 閱讀 7991

題目描述

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。

思路1:

1、判斷有無環:定義兩指標,quicknode每次走兩步,slownode每次走一步。如果兩個指標相遇,則說明有環;否則無環。

2、判斷環的入口節點:相遇的節點必在環內!讓slownode走一圈,計算環中節點個數count。

3、slownode和quicknode都指向頭節點,先讓quicknode走count步,然後兩指標一起走,相遇節點即為環的入口節點。

/*

struct listnode

};*/

class

solution

//2、計算環中節點個數

int count=0;

listnode* tmpnode = slownode-

>next;

while

(tmpnode!=slownode)

count+=1

;//3、求環的入口節點

quicknode=phead;

slownode=phead;

for(

int i=

0;i)while

(quicknode!=slownode)

return slownode;}}

;

思路2:修改了思路1中2、3步;

1、先判斷是否有環;

2、若有環,讓quicknode指向頭結點,slownode依舊指向相遇處;讓兩個指標同時同頻走,相遇即為環的入口節點。

class

solution

quicknode=phead;

while

(quicknode!=slownode)

return slownode;}}

;

劍指offer23 鍊錶中環的入口節點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。兩個指標,p1,p2 p1一次走一步,p2一次走兩步。第一次相遇之後開始計數,第二次再相遇時count的值就是環有多少個節點。兩個指標,p1,p2 p1先走count步,然後兩個再同時走,相遇的點就是入口節點。struct l...

劍指offer23 鍊錶中環的入口節點

判斷單鏈表中有沒有環,如果有找到環的入口節點。三個問題 1 如何確定鍊錶中包含環 兩個指標,乙個指標一次走一步,乙個指標一次走兩步。如果走得快的指標追上了走得慢的指標,則說明鍊錶包含環 如果走得快的指標走到了鍊錶末尾 p next null 都沒有追上第乙個指標,則無環。2 如何找到環的入口 定義兩...

劍指offer 23 鍊錶中環的入口節點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出none。思路 1.找相遇點 設定乙個快指標pfast乙個慢指標pslow,先找到乙個相遇點,一定在環中 2.計算環的長度 從相遇點出發,到相遇點結束 1,即為環的長度。3.pfast 從phead 環的長度出發 pslow從phead...