2023年9月5日 星期二

【LeetCode】【Kotlin】141. Linked List Cycle

 解法

設計兩個指標,一個每次走一步,一個每次走兩步。如果有環,則如同賽跑,在快者跑完一圈開始追慢的人的時候,快的人位於第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:

張貼留言