我們在前面文章中寫過用快慢指針判斷鏈表是否帶環:
leetcode:環形鏈表-CSDN博客
我們用的是slow指針一次走一步,fast指針一次走兩步,當slow入環后開始了追擊,每走一次距離縮短1,最終就會相遇
思考問題
但是我們思考一個問題:如果slow一次走一步,fast一次走三步,會不會相遇呢?
思考這個問題我們可以做一個假設:
假設環的長度是C,假設slow進環時,fast與slow之間的距離為N
推導思路
接著我們可以推一下:
如果slow一次走一步,fast一次走三步,每次追擊距離縮小2
結論
所以我們可以得出結論:
- 如果N是偶數,就直接追上了
- 如果N是奇數,C是奇數,第一輪錯過了,第二輪就追上了
- 如果N是奇數,C是偶數,就永遠追不上