[圖片上傳中...(image.png-40ee7a-1514103938541-0)]
給定一個(gè)有環(huán)鏈表荣德,實(shí)現(xiàn)一個(gè)算法返回環(huán)路的開頭節(jié)點(diǎn)
思路
1.檢測(cè)鏈表是否存在環(huán)路
slowRunner 1步/次人灼,fastRunner 2步/次遵蚜,一起跑田篇,如果相遇 則有環(huán)路
2.什么時(shí)候相遇
假設(shè)鏈表起始點(diǎn)到環(huán)路起始點(diǎn)為k峦椰,當(dāng)slowRunner跑到環(huán)路起始點(diǎn)時(shí)徒扶,fastRunner跑到了環(huán)路起始點(diǎn)后k步趣席,設(shè)環(huán)路長(zhǎng)度為 Loop_Size(暫時(shí)不考慮k>Loop_Size 若考慮則 為 mod(k,Loop_Size))兵志,則fastRunner距離slowRunner Loop_Size-k 步也就是距離 環(huán)路起始點(diǎn) Loop_Size-k 步,Loop_Size-k時(shí)間后宣肚,slowRunner和fastRunner都在環(huán)路起始點(diǎn) Loop_Size-k處想罕,此時(shí)相遇,此時(shí)他倆距離起始點(diǎn) Loop_Size-k步霉涨,同時(shí)按价,若以環(huán)路起始點(diǎn)為終點(diǎn),他倆距離起始點(diǎn) k步
3.如何找到環(huán)路起始處
鏈表起始點(diǎn)a 距 環(huán)路起始點(diǎn) b = k步
slow fast相遇處 c 距 環(huán)路起始點(diǎn)b = k步
也就是說 把slow放到a,fast還在c笙瑟,速度現(xiàn)為一致俘枫,同時(shí)跑, k步后 相遇在 環(huán)路起始點(diǎn)b逮走。
代碼略。