Circular staircase image evoking cyclic pointer traversal
备战面试2026年4月6日
返回文章列表

环形链表 II linked-list-cycle-ii

环起点问题,首先想到相遇的地方大概率不会是起点 相遇的时候,慢指针走了 k 步,快指针走了 2k 步 假设当前相遇点距离环起点为 m 步,那么此时两个指针走相同步数(k-m)会再次相遇

文章大纲

题解

 
 

思路

[!hint]

题解

class Solution {
    public ListNode detectCycle(ListNode head) {
        ListNode fast, slow;
        fast = slow = head;
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
            if (fast == slow) break;
 
        }
        // 上面的代码类似 hasCycle 函数
        if (fast <mark> null || fast.next </mark> null) {
            // fast 遇到空指针说明没有环
            return null;
        }
 
        // 重新指向头结点
        slow = head;
 
        // 快慢指针同步前进,相交点就是环起点
        while (slow != fast) {
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }
}
// 详细解析参见:
// https://labuladong.online/algo/essential-technique/linked-list-skills-summary/
 
 

思路

[!hint]

  • 环起点问题,首先想到相遇的地方大概率不会是起点
  • 相遇的时候,慢指针走了 k 步,快指针走了 2k 步
  • 假设当前相遇点距离环起点为 m 步,那么此时两个指针走相同步数(k-m)会再次相遇

Continue Reading

关联文档推荐

查看全部

备战面试

事务

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

备战面试

sorted set

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

备战面试

场景设计

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