22.链表中环的入口结点

给定一个链表,若其中包含环,则输出环的入口节点。

若其中不包含环,则输出null。

数据范围:

  • 节点 val 值取值范围 [1,1000]。
  • 节点 val 值各不相同。
  • 链表长度 [0,500]。

样例:
image

给定如上所示的链表:
[1, 2, 3, 4, 5, 6]
2
注意,这里的2表示编号是2的节点,节点编号从0开始。所以编号是2的节点就是val等于3的节点。
则输出环的入口节点3.

代码:

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
class Solution {
    public ListNode entryNodeOfLoop(ListNode head) {
        // 定义哈希表,用于判断是否存在环
        Set<ListNode>set = new HashSet<>();
        //定义节点,用于表示链表开始入环的第一个节点,如果无环,则为null
        ListNode p = null;
        //遍历链表
        while(head!=null){
            //如果当前节点在哈希表中已经存在,说明出现了环,将p指向当前节点,退出循环
            if(set.contains(head)){
                p = head;
                break;
            }
            //将当前节点加入哈希表
            set.add(head);
            //当前节点向后移
            head = head.next;
        }
        //返回结果
        return p;
    }
}
posted @ 2025-05-15 09:37  回忆、少年  阅读(2)  评论(0)    收藏  举报