互联网面试宝典

您现在的位置是: 首页 > 数据结构

问题详情

怎么检测一个链表是否有环?

面试宝典 2023-06-12 Web前端开发工程师 56
可以使用快慢指针来检测一个链表是否有环。具体步骤如下:

1. 初始化两个指针,一个慢指针 slow 指向头节点,一个快指针 fast 也指向头节点;

2. 开始遍历链表,每次让 slow 向后移动一个节点,fast 向后移动两个节点;

3. 如果存在环,那么快指针终将追上慢指针,并在某一时刻与慢指针重合。如果不存在环,那么快指针会先到达链表尾部;

4. 如果存在环,我们可以进一步找到环的起点。当快指针与慢指针相遇时,让其中一个指针重新指向头节点,然后两个指针以相同的速度(每次前进一个节点)遍历链表,直到它们再次相遇,这个点就是环的起点。

时间复杂度为O(n),空间复杂度为O(1)。