「ソードフィンガーオファー」-55。リンクリスト内のリングのエントリノード

1.この質問の知識ポイント

リンクリスト

2.タイトルの説明

リンクリストの場合、リングが含まれている場合は、リンクリストのリングのエントリノードを見つけてください。それ以外の場合は、nullを出力します。

3.問題解決のアイデア

  1. 単一リンクリストの各ノードをトラバースします
  2. 現在のノードアドレスがセットに表示されていない場合は、セットに保存されます
  3. Setに表示されている場合、現在のノードはリングのエントリノードです。
  4. 単一リンクリスト全体がトラバースされた後、それがセットに表示されない場合、リングはありません

4.コード

public class Solution {
    
    

    public ListNode EntryNodeOfLoop(ListNode pHead) {
    
    
        HashSet<ListNode> set = new HashSet<>();
        // 遍历单链表的每个结点
        while (pHead != null) {
    
    
            if (set.contains(pHead)) {
    
    
                // 出现在 Set 中,则当前结点就是环的入口结点
                return pHead;
            } else {
    
    
                // 如果当前结点地址没有出现在 Set 中,则存入 Set 中
                set.add(pHead);
                pHead = pHead.next;
            }
        }
        // 整个单链表遍历完,若没出现在 Set 中,则不存在环
        return null;
    }
}

おすすめ

転載: blog.csdn.net/bm1998/article/details/112993888