Likou 142リングリンクウォッチII(ハッシュウォッチ、高速および低速ポインター(省略))

1.タイトル

ここに画像の説明を挿入

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

この質問は、循環リンクリストIに基づく拡張です。ハッシュテーブル方式と高速および低速ポインタ方式の両方を覚えていますが、この質問のハッシュテーブル方式は比較的単純であり、一方、高速ポインタと低速ポインタは比較的複雑ですが、少しです。

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

自分で書いたコードに直接:

public class Solution {
    
    
    public ListNode detectCycle(ListNode head) {
    
    
        //hash表
        Set<ListNode> set = new HashSet<>();
        ListNode temp = head;

        while(temp != null){
    
    
            if(set.contains(temp)){
    
    
                return temp;
            }
            //如果没有包含节点,则添加
            set.add(temp);
            temp = temp.next;
        }
        return null;
    }
}

最初は、循環リンクリストIのように、addのブール戻り値を使用してtempを返す準備をしました。containsメソッドについては考えていませんでした。ここで注意してください。
コアアイデアは、リンクリストをトラバースし、addメソッドを使用してすべてのノードをハッシュテーブルに追加することです。追加するノードがすでに含まれている場合、つまり、が含まれている場合は、追加するノードに戻ります。 、ノードはリングノードの最初です。
ここに画像の説明を挿入

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

おすすめ

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