Likou 141サーキュラーリンクウォッチ(ハッシュウォッチ+スピードポインター)

1.タイトル

ここに画像の説明を挿入

2.私の最初の考えと問題

ハッシュテーブルまたは高速ポインタと低速ポインタの方法を覚えておいてください。
ハッシュテーブルメソッドの問題を解決するときは、ロジックに注意してください。!set.add(temp)ステートメントを実行して、セットにtempを追加し、ブール値を返します。

3.問題解決方法1:ハッシュテーブル

public class Solution {
    
    
    public boolean hasCycle(ListNode head) {
    
    
        Set<ListNode> set = new HashSet<>();
        ListNode temp = head;
        while(temp != null){
    
    
            if(!set.add(temp)){
    
    
                return true;
            }
            temp = temp.next;
        }
        return false;
    }
}

ここに画像の説明を挿入

4.問題解決方法2:速いポインターと遅いポインター

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

        while(slow != fast){
    
    
            if(fast == null || fast.next == null){
    
    
                return false;
            }
            slow = slow.next;
            fast = fast.next.next;
        }
        return true;

    }
}

書き出すだけです。
ここで、最初にheadとhead.nextがnullであるかどうか
判別し、次にfastを定義した後にfastとfast.nextが空であるかどうか判別することに注意してください。このステップは無視できません。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/ambitionLlll/article/details/113921136