Chain-link image evoking linked list cycles
备战面试2026年4月6日
返回文章列表

环形链表 linked-list-cycle

看到环问题,首先想到快慢指针 一个步长大于另一个,链表成环的情况下,两个指针必定相遇 环检测的复杂度 = 遍历链表的时间复杂度 假如遍历完成,说明没有成环 记住遍历的条件,并在过程中校验

文章大纲

题解

public class Solution {
    public boolean hasCycle(ListNode head) {
        // 快慢指针初始化指向 head
        ListNode slow = head, fast = head;
        // 快指针走到末尾时停止
        while (fast != null && fast.next != null) {
            // 慢指针走一步,快指针走两步
            slow = slow.next;
            fast = fast.next.next;
            // 快慢指针相遇,说明含有环
            if (slow == fast) {
                return true;
            }
        }
        // 不包含环
        return false;
    }
}
// 详细解析参见:
// https://labuladong.online/algo/essential-technique/linked-list-skills-summary/
 

思路

[!hint]

  • 看到环问题,首先想到快慢指针
  • 一个步长大于另一个,链表成环的情况下,两个指针必定相遇
  • 环检测的复杂度 = 遍历链表的时间复杂度
  • 假如遍历完成,说明没有成环
  • 记住遍历的条件,并在过程中校验

Continue Reading

关联文档推荐

查看全部

备战面试

事务

B+树与哈希索引的核心区别在于数据结构与适用查询类型。 B+树是平衡多叉树,支持范围查询和排序,适合磁盘存储的OLAP场景; 哈希通过哈希函数实现O(1)等值查询,但无法处理范围操作,常用于内存键值存储。

备战面试

sorted set

哨兵机制是保证 Redis 的高可用性 监测主节点是否存活 - 发现主节点挂了,会选举一个从节点切换成主节点 - 同时将新的主节点信息通知给其他从节点

备战面试

场景设计

设计一个抢红包系统 如何拆包 随机数 线性切割 二倍均值法