鍊錶中環的入口結點

2021-08-30 02:43:56 字數 1014 閱讀 3350

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

時間限制:1秒 空間限制:32768k 熱度指數:130637

第一步,找環中相匯點。分別用p1,p2指向鍊錶頭部,p1每次走一步,p2每次走二步,直到p1=p2找到在環中的相匯點。

第二步,找環的入口。接上步,當p1=p2時,p2所經過節點數為2x,p1所經過節點數為x,設環中有n個節點,p2比p1多走m圈,有2x=n*m+x;則x=n*m;可以看出p1走了起點到相遇點距離:x

第三步,再讓p2指向鍊錶頭部,p1位置不變,p1,p2每次走一步直到p1=p2; 此時p1指向環的入口。設起點到入口點距離為a,p1在環中,距環入口為x-a;p2從起點走到環入口為a;則p1在環中共走了(x-a)+a=x=n*m;所以此時p2和p1均指向環的入口。

詳見:

/*

struct listnode

};*/

class

solution

return p1;}}

return

null;}

};

或者為:
/*

struct listnode

};*/

class

solution

return p1;}}

return

null;}

};

if(phead==null||phead->next==null)//不可缺少這一步判斷

return null;

這是因為若phead->next==null,而null無next指標,則在第一種方法會進入迴圈,會在p2處產生錯誤。該錯誤應為指標出錯,但牛客網的程式設計有時會統一報錯為:

您的**已儲存

段錯誤:您的程式發生段錯誤,可能是陣列越界,堆疊溢位(比如,遞迴呼叫層數太多)等情況引起

case通過率為0.00%

鍊錶中環的入口結點

乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。class listnode public class solution return p1 return null 分析 假設鍊錶的起始點到環的入口點節點數為k,環的的節點數為x,讓p2的速度是p1的兩倍,p1和p2相遇在環的第y各節點,可以得到如下等...

鍊錶中環的入口結點

題目要求 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點 分析 1 一種比較偷懶的方法就是遍歷鍊錶,並直接利用hashmap來儲存已經遍歷過的結點。一旦發現已經儲存過的結點,那麼該結點就是環的入口結點。2 參考自 我簡單畫了乙個圖 上傳之後一直是橫過來的。不知道為什麼轉不正 設定兩個指標p1和p2,乙...

鍊錶中環的入口結點

題目描述 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路1 設環中結點數是n,環的入口位置是x 距離起點走多少步 用快慢指標p,q,q移動的速度是p的2倍,當兩個指標相遇時p走的步數是y,q走的步數是2y,q比p多走k個環的距離,即 2y y kn,則y kn。p距離環的入口點的距離為y x,此...