題目:已知一個鏈表有環,求環的入口
鏈表有環,所以讓一個快指針,一個慢指針,同時從起點出發,他們必定在環中相遇。而且相遇的時候,慢指針必定只走了環的不到一圈。(為什么可以自己想。其實可以反推,如果相遇點是慢指針第二次走過的時候,那么第一次走過環中此點和第二次走過環中此點期間,快指針肯定走過不止一圈,所以應該在其他的地方早就相遇了,所以假設不成立。)
假設一個慢指針以速度v從起點開始走,一個快指針以速度2v從起點開始走,在環中某個點相遇。
設起點到環入口的距離為x,環入口到相遇點的距離為y,環的長度為L,那么:
vt = x+y
2vt=x+y+nL
得到x+y = nL
即x = nL-y,發現了沒有
相遇點在距離環入口y,那么走nL-y就又走到了環入口。
還沒有思路嗎。。。
慢指針和快指針相遇后,慢指針以速度v再從起點出發,快指針降速,也以速度v,不過是從相遇點出發,
當慢指針走過x的距離的時候,快指針走過了nL-y(因為他們速度一樣,且有關系式x = nL-y),此時看快指針到哪了?
快指針從距離環入口y的地方出發,走過了nL-y,你說快指針到了哪???當然是又回到了環入口了啊。。。。
慢指針從起點走過了x,說明慢指針也走到了環的入口了啊。。。。
說明什么???還在蒙圈中嗎。。。
說明他們相遇了啊,而且相遇的地方,恰好就是環的入口啊。。。
估計還在懵逼中。。。