"Предложение пальца меча" -55. Входной узел кольца в связанном списке

1. Основные сведения об этом вопросе

Связанный список

2. Описание заголовка

Для связанного списка, если он содержит кольцо, найдите входной узел кольца связанного списка, в противном случае выведите ноль.

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