Li Buckle141_リングチェーンウォッチ

リンクリストにリングがあるかどうかを確認します

「亀とうさぎ」と同様に、速いポインターと遅いポインターを使用して、時計にリングがあり、次に速い「ウサギ」が最初にリングに入り、次に内側を一周し、その後「亀」がリングに入り、それらはすべてリングで一周します、不平等な速度のために、彼らは間違いなく会うでしょう。

public boolean hasCycle(ListNode head) {
        if (head == null || head.next == null) return false;
        ListNode slow = head;
        ListNode fast = head.next;
        while(slow != fast){
            if (slow == null || fast == null){
                return false;
            }
            slow = slow.next;
            fast = fast.next.next;
        }
        return true;
    }

なぜ初期条件を次々に設定し、次に遅いポイントを頭に、速いポイントを頭に設定する必要があるのですか?
終了条件が遅いと速いので、最初は両者が等しいという状況を避ける必要があります。

複雑さの分析

時間計算量:O(n)
空間計算量:O(1)

おすすめ

転載: blog.csdn.net/Yungang_Young/article/details/112797017
おすすめ