解法
設計兩個指標,一個每次走一步,一個每次走兩步。如果有環,則如同賽跑,在快者跑完一圈開始追慢的人的時候,快的人位於第n位,慢的人位於第n+x位,然後在他們前進一次後,快者位於 n+2 位,慢者位於 n+x+1 位,兩者的差距從 x 縮小至 x-1。因此,若有環,則兩者終會相遇。
程式碼
class Solution {
fun hasCycle(head: ListNode?): Boolean {
var slow = head;
var fast = head;
while (true) {
slow = slow?.next ?: return false
fast = fast?.next?.next ?: return false
if(slow == fast) return true
}
return false
}
}
0 comments:
張貼留言