題目描述:給一個鏈表,若其中包含環(huán)谭羔,請找出該鏈表的環(huán)的入口結點瘟裸,否則诵竭,輸出null。
問題分析:設置快慢兩個指針沙郭,從鏈表頭節(jié)點出發(fā)呵燕,快指針每次走兩步件相,慢指針每次走一步再扭,則兩個指針必相遇在鏈表的環(huán)里泛范。相遇后分別從頭節(jié)點和相遇節(jié)點繼續(xù)出發(fā),并且每次都只走一步赡突,最后將在入口節(jié)點處相遇区赵。
示意圖
假設環(huán)之外的節(jié)點長度為x笼才,入口節(jié)點到相遇節(jié)點的長度為m,相遇節(jié)點到入口節(jié)點的距離為n(順時針方向距離)昂羡,那么快指針所走路程為x+k(m+n)+m? (k>=1),慢指針所走路程為x+m摔踱。并且快指針所走路程是慢指針的兩倍派敷,即2(x+m)=x+k(m+n)+m,化簡得到x=(k-1)(m+n)+n般眉,即頭節(jié)點到入口節(jié)點的距離等于 相遇節(jié)點到入口節(jié)點的距離加上環(huán)的長度潜支,也就是最終會在入口節(jié)點相遇。
代碼截圖: