1.この質問の知識ポイント
リンクリスト
2.タイトルの説明
リンクリストの場合、リングが含まれている場合は、リンクリストのリングのエントリノードを見つけてください。それ以外の場合は、nullを出力します。
3.問題解決のアイデア
- 単一リンクリストの各ノードをトラバースします
- 現在のノードアドレスがセットに表示されていない場合は、セットに保存されます
- Setに表示されている場合、現在のノードはリングのエントリノードです。
- 単一リンクリスト全体がトラバースされた後、それがセットに表示されない場合、リングはありません
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;
}
}