Hot100:环形链表(Linked List Cycle)Floyd 快慢指针 ACERS 解析

副标题 / 摘要 判断链表是否有环,本质是“指针追及问题”。本文用 ACERS 结构讲透 Floyd 快慢指针判环:为什么一定能相遇、如何避免空指针、以及在工程里如何用同一思想识别循环引用/路由环路。 预计阅读时长:10~12 分钟 标签:Hot100、链表、快慢指针 SEO 关键词:Hot100, Linked List Cycle, 环形链表, 判环, Floyd, 快慢指针, LeetCode 141 元描述:Floyd 快慢指针 O(n)/O(1) 判断单链表是否有环,附替代方案对比、易错点与多语言实现。 A — Algorithm(题目与算法) 题目还原 给你一个链表的头节点 head,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 注意:pos 不作为参数进行传递,它只是用于标识链表的实际情况。 若存在环返回 true,否则返回 false。 输入输出 名称 类型 描述 head ListNode 单链表头节点(可能为空) 返回 bool 是否存在环 示例 1(自拟) head: 3 -> 2 -> 0 -> -4 ^ | |_____| 输出: true 示例 2(自拟) head: 1 -> 2 -> null 输出: false 目标读者 正在刷 Hot100 / 准备面试的同学 想把“链表双指针”沉淀成稳定模板的中级开发者 在工程里需要识别循环引用、链式结构异常的同学(C/C++/Go/Rust/JS 皆适用) 背景 / 动机 链表出现环在工程里并不罕见: 例如手写内存池的 free list、对象引用链、状态机/任务编排的 next 指针、配置链路的“下一跳”等。 ...

2026年2月1日 · 8 分钟 · map[name:Jeanphilo]

Hot100:回文链表(Palindrome Linked List)快慢指针 + 反转后半段 O(1) 空间 ACERS 解析

副标题 / 摘要 回文链表的核心是“对称比较”,但单链表不能从尾部往前走。最稳的工程化解法是:快慢指针找中点 -> 原地反转后半段 -> 比较 -> 再反转恢复结构,做到 O(n) 时间、O(1) 额外空间且不破坏链表。 预计阅读时长:10~14 分钟 标签:Hot100、链表、快慢指针、原地反转 SEO 关键词:回文链表, Palindrome Linked List, O(1) 空间, 快慢指针, 反转后半段, LeetCode 234 元描述:快慢指针定位中点,反转后半段与前半段逐一比较,最后恢复链表结构;O(n)/O(1) 判断单链表是否回文。 A — Algorithm(题目与算法) 题目还原 给你一个单链表的头节点 head,请你判断该链表是否为回文链表: 如果是回文,返回 true;否则返回 false。 输入输出 名称 类型 描述 head ListNode 单链表头结点 返回 bool 是否为回文 示例 1 输入: 1 -> 2 -> 2 -> 1 输出: true 示例 2 输入: 1 -> 2 输出: false 目标读者 刷 Hot100,想掌握“链表中点 + 原地反转”组合拳的学习者 面试中经常遇到“回文/对称/镜像”类题的开发者 关注空间效率、且需要保证数据结构不被破坏的工程实践者 背景 / 动机 在数组里判断回文很简单:左右指针向中间收缩即可。 但在单链表里,你只能顺着 next 单向走,无法从尾部回看,这就让“对称比较”变得不那么直接。 ...

2026年2月1日 · 11 分钟 · map[name:Jeanphilo]

Hot100:反转链表(Reverse Linked List)三指针迭代/递归 ACERS 解析

副标题 / 摘要 反转链表是“指针重连”的入门必修课:看似简单,却最容易因为边界、断链、顺序写错而翻车。本文用 ACERS 结构把三指针迭代写法讲透,并给出递归对照与多语言可运行实现。 预计阅读时长:10~12 分钟 标签:Hot100、链表、指针、迭代 SEO 关键词:Hot100, Reverse Linked List, 反转链表, 三指针, 迭代, 递归, LeetCode 206 元描述:三指针迭代 O(n)/O(1) 反转单链表,附递归对比、工程迁移与多语言实现。 A — Algorithm(题目与算法) 题目还原 给你单链表的头节点 head,请你反转链表,并返回反转后的链表。 输入输出 名称 类型 描述 head ListNode 单链表头节点(可能为空) 返回 ListNode 反转后的新头节点 示例 1(自拟) 输入: 1 -> 2 -> 3 -> 4 -> 5 -> null 输出: 5 -> 4 -> 3 -> 2 -> 1 -> null 示例 2(自拟) 输入: 1 -> 2 -> null 输出: 2 -> 1 -> null 目标读者 正在刷 Hot100 / 准备面试的同学 写链表题经常断链/空指针、希望建立稳定模板的中级开发者 需要在 C/C++/Rust 等语言里熟练处理指针与所有权的工程师 背景 / 动机 在真实工程里,“反转链表”不一定以 LeetCode 的形态出现,但它背后的能力非常通用: ...

2026年2月1日 · 9 分钟 · map[name:Jeanphilo]

Hot100:相交链表(Intersection of Two Linked Lists)双指针换头 O(1) 空间 ACERS 解析

副标题 / 摘要 相交链表的关键不是比较值,而是比较“节点引用/地址”。本文用 ACERS 结构把朴素哈希解法、长度对齐解法与最常用的“双指针换头”模板讲清楚,并给出多语言可运行实现(不修改链表、无环前提)。 预计阅读时长:10~14 分钟 标签:Hot100、链表、双指针 SEO 关键词:相交链表, 双指针换头, O(1) 空间, LeetCode 160, Intersection of Two Linked Lists 元描述:双指针分别走完 A 与 B 后交换起点,保证在 m+n 步内相遇于交点或同时到达 null;O(m+n)/O(1) 且不修改链表结构。 A — Algorithm(题目与算法) 题目还原 给你两个单链表的头节点 headA 和 headB,请你找出并返回两个单链表相交的起始节点。 如果两个链表不存在相交节点,返回 null。 补充约束: 题目数据保证整个链式结构中不存在环 返回结果后,链表必须保持其原始结构(不允许修改链表) 输入输出 名称 类型 描述 headA ListNode 链表 A 的头结点 headB ListNode 链表 B 的头结点 返回 ListNode / null 相交起始节点(同一节点对象),或 null 示例 1(图示场景) A: a1 -> a2 -> c1 -> c2 -> c3 B: b1 -> b2 -> b3 -> c1 -> c2 -> c3 输出: c1(返回节点引用,不是数值) 示例 2(不相交) A: 1 -> 2 -> 3 B: 4 -> 5 输出: null 目标读者 刷 Hot100,希望把链表双指针模板一次性吃透的学习者 经常把“节点值相等”误当作“节点相同”的初中级开发者 需要在工程里处理共享链式结构(共享后缀/共享节点)的工程师 背景 / 动机 这题看似简单,但它强迫你分清三个概念: ...

2026年2月1日 · 10 分钟 · map[name:Jeanphilo]

Hot100:搜索二维矩阵 II(Search a 2D Matrix II)右上角阶梯搜索 O(m+n) ACERS 解析

副标题 / 摘要 这题的关键不是二分,而是利用“行列都单调”的结构,从**右上角(或左下角)**像走楼梯一样移动:每一步都能排除一整行或一整列,从而把复杂度降到 O(m+n)。 预计阅读时长:10~13 分钟 标签:Hot100、矩阵、单调性、指针 SEO 关键词:搜索二维矩阵 II, 单调矩阵查找, 右上角搜索, O(m+n), LeetCode 240 元描述:在行列均升序的矩阵中搜索 target:从右上角阶梯式移动,每步排除一行或一列,O(m+n)/O(1) 解法与多语言实现。 目标读者 刷 Hot100,希望掌握“二维单调结构剪枝”模板的学习者 写过二分但总在二维问题里迷路的中级开发者 在工程中需要查询/裁剪/定位二维单调表格的工程师 背景 / 动机 二维表在工程里很常见:费率表、校准表、阈值表、网格配置表等。 当一个表满足“横向递增 + 纵向递增”的 二维单调(monotone matrix) 特性时,很多查询不需要 O(mn) 全扫。 这题就是经典入门:用单调性做剪枝,把搜索降成线性级别。 核心概念 概念 含义 在本题的作用 二维单调矩阵 行升序、列升序 保证“比较一次就能排除一行/列” 右上角起点 右上角元素:左边更小、下边更大 决策方向天然明确 剪枝 排除不可能包含 target 的行/列 每步减少搜索空间 O(1) 额外空间 只用 i/j 指针 适合大矩阵与性能场景 A — Algorithm(题目与算法) 题目还原 给定一个 m x n 矩阵 matrix 和一个目标值 target。矩阵满足: ...

2026年2月1日 · 7 分钟 · map[name:Jeanphilo]

Hot100:螺旋矩阵(Spiral Matrix)边界收缩模拟 ACERS 解析

副标题 / 摘要 “顺时针螺旋遍历”看似只是打印顺序,实则考验你对边界与循环不变量的掌控。本文用 ACERS 结构给出可直接复用的边界收缩模板,并给出多语言可运行实现。 预计阅读时长:12~15 分钟 标签:Hot100、矩阵、模拟、边界收缩 SEO 关键词:Hot100, Spiral Matrix, 螺旋矩阵, 顺时针螺旋遍历, 边界收缩, LeetCode 54 元描述:用边界收缩法输出矩阵的顺时针螺旋序列,包含推导、工程场景、复杂度对比与多语言代码。 目标读者 正在刷 Hot100、想把“矩阵模拟题”沉淀成模板的同学 对边界条件容易写错、希望提升代码稳健性的中级开发者 做可视化/栅格数据处理/网格路径相关任务的工程师 背景 / 动机 矩阵类题目最容易“写得出来,但写不对”: 多一层循环、多一个边界判断,就可能在单行/单列、奇偶层数时出错或重复输出。 螺旋遍历是一个很好的训练题:它逼你把 循环不变量(哪些行列还没被处理)和 边界收缩(每处理完一条边就把边界往里缩)描述清楚,代码才能既短又不炸。 核心概念 边界(Boundaries):用 top/bottom/left/right 表示当前还未处理的矩形外框 层(Layer):每次循环处理一圈外框(上边、右边、下边、左边) 收缩(Shrink):每处理完一条边就移动对应边界:top++、right--、bottom--、left++ 循环不变量:始终保证未输出区域是 top..bottom × left..right A — Algorithm(题目与算法) 题目还原 给你一个 m 行 n 列的矩阵 matrix,请按照 顺时针螺旋顺序,返回矩阵中的所有元素。 输入输出 名称 类型 描述 matrix int[][] m × n 的矩阵 返回 int[] 按顺时针螺旋顺序输出的所有元素 示例 1(自拟) matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] 输出: [1, 2, 3, 6, 9, 8, 7, 4, 5] 示例 2(自拟) matrix = [ [ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12] ] 输出: [1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7] C — Concepts(核心思想) 思路推导:从“标记访问”到“边界收缩” 朴素思路:方向数组 + visited 标记 从 (0,0) 出发按右/下/左/上转向;走到越界或已访问就转向。 ...

2026年2月1日 · 9 分钟 · map[name:Jeanphilo]

Hot100:旋转图像(Rotate Image)转置 + 行反转实现原地 90 度旋转 ACERS 解析

副标题 / 摘要 旋转图像的核心不是“算新坐标”,而是把映射拆成两个可原地执行的操作:转置(transpose)+ 反转每一行(reverse rows)。本文按 ACERS 模板给出从朴素解到原地解的推导、常见坑与多语言可运行实现。 预计阅读时长:10~14 分钟 标签:Hot100、矩阵、原地、转置 SEO 关键词:旋转图像, Rotate Image, 原地旋转 90 度, 转置, 行反转, LeetCode 48 元描述:顺时针原地旋转 n×n 矩阵 90 度:转置 + 行反转模板解;含思路推导、复杂度对比、工程迁移与多语言实现。 目标读者 刷 Hot100,想把“矩阵原地技巧”整理成可复用模板的学习者 需要在工程里处理二维网格(图像/棋盘/地图/热力图)变换的开发者 对空间敏感,希望避免额外矩阵拷贝的工程师 背景 / 动机 在很多场景里,“旋转”是高频操作: 图像增强、棋盘/地图方向变换、传感器方向校正、UI 表格视图旋转等。 如果每次旋转都新建一个矩阵,空间开销是 O(n^2),在大矩阵或高频调用时会非常“吃内存”,甚至触发 GC/内存抖动。 因此这题的关键约束是:必须原地(in-place)完成 90 度旋转。 核心概念 概念 含义 为什么重要 坐标映射 旋转后的新坐标与旧坐标之间的关系 让你知道“最终要变成什么” 转置(Transpose) matrix[i][j] 与 matrix[j][i] 交换 原地可做、且能把行列关系对齐 行反转(Reverse Row) 把每一行左右翻转 与转置组合后刚好等价于顺时针 90 度 原地算法 只用常数额外空间完成变换 适合大矩阵与性能场景 A — Algorithm(题目与算法) 题目还原 给定一个 n x n 的二维矩阵 matrix 表示图像。请将图像 顺时针旋转 90 度。 要求 原地修改 matrix,不要使用另一个矩阵。 ...

2026年2月1日 · 7 分钟 · map[name:Jeanphilo]

矩阵置零:用首行首列做标记实现原地 O(1) 空间(LeetCode 73)

副标题 / 摘要 “矩阵置零”是典型的二维标记传播问题:某个位置为 0,会影响整行整列。本文用 ACERS 结构讲清楚为什么不能直接改、如何用首行首列做标记实现原地 O(1) 额外空间,并给出多语言可运行代码。 预计阅读时长:12~15 分钟 标签:矩阵、原地算法、标记位 SEO 关键词:矩阵置零, 原地 O(1) 空间, 首行首列标记, LeetCode 73 元描述:用首行首列作标记位,原地将含 0 的行与列全部置零;包含推导、复杂度对比、工程迁移与多语言实现。 目标读者 刷 LeetCode,想把“二维数组原地技巧”沉淀成稳定模板的同学 需要在工程里做二维网格/表格/矩阵数据清洗与传播标记的开发者 对空间优化敏感(嵌入式、性能场景、内存受限)的工程师 背景 / 动机 二维数据在工程里到处都是:表格、图像、传感器网格、关联矩阵…… “某个单元格触发规则 -> 影响整行整列”这种联动,本质就是 行列传播(row/col propagation)。 这题额外要求“原地”,逼你掌握一个非常通用的技巧:用数据结构本身的某些位置当作标记位,避免额外内存。 核心概念 传播标记:发现 0 后,不是立刻改整行整列,而是先记录“哪些行/列要被清零” 原地(in-place):只允许 O(1) 额外空间(不算输入矩阵本身) 标记位复用:把 matrix[0][j] 当作“第 j 列要清零”的标记,把 matrix[i][0] 当作“第 i 行要清零”的标记 首行/首列特判:首行/首列既是数据又是标记位,因此需要单独用两个布尔量记录它们是否本来就该清零 A — Algorithm(题目与算法) 题目还原 给定一个 m x n 矩阵 matrix:如果某个元素为 0,则将该元素所在的 整行 与 整列 的所有元素都设置为 0。 要求 原地修改 matrix(通常不需要返回值)。 ...

2026年2月1日 · 10 分钟 · map[name:Jeanphilo]

Hot100:缺失的第一个正数(First Missing Positive)原地索引定位 ACERS 解析

副标题 / 摘要 缺失的第一个正数是经典的“原地哈希/索引定位”题:把值放回它应该在的位置,再线性扫描即可找到答案。本文按 ACERS 拆解思路、工程应用与多语言实现。 预计阅读时长:12~15 分钟 标签:Hot100、数组、原地哈希 SEO 关键词:First Missing Positive, 缺失的第一个正数, 原地哈希, 索引映射, O(n) 元描述:O(n) 时间、O(1) 额外空间的原地索引定位解法,含工程场景与多语言代码。 目标读者 正在刷 Hot100 的学习者 想掌握“原地索引定位”模板的中级开发者 需要在原数组内做高效重排与定位的工程师 背景 / 动机 “找最小缺失正数”本质是一个定位问题: 如果能把值 x 放在索引 x-1 上,那么答案就是第一个不匹配的位置。 题目还要求 O(n) 时间和 O(1) 额外空间,逼迫我们放弃排序与哈希表, 转而使用原地置换的技巧。 核心概念 概念 含义 作用 原地哈希 用数组下标充当哈希桶 O(1) 额外空间 索引定位 值 x 应放到 x-1 构造可扫描的结构 置换交换 不断交换直到就位 线性时间完成 A — Algorithm(题目与算法) 题目还原 给你一个未排序的整数数组 nums,找出其中没有出现的最小正整数。 请实现 O(n) 时间复杂度并且只使用 常数级别额外空间的解决方案。 输入输出 名称 类型 描述 nums int[] 未排序整数数组 返回 int 最小缺失的正整数 示例 1(官方) 输入: nums = [1,2,0] 输出: 3 示例 2(官方) 输入: nums = [3,4,-1,1] 输出: 2 思路概览 对每个位置 i,把 nums[i] 放到它应该去的位置 nums[i]-1。 完成“就位”后,从左到右找到第一个 nums[i] != i+1 的位置。 该位置对应的正整数 i+1 即为答案;若全部匹配则答案为 n+1。 C — Concepts(核心思想) 关键模型 值 x 应该放在索引 x-1 方法归类 原地哈希(Index-as-Hash) 数组置换 / 位置归位 线性扫描验证 不变量 当置换结束时: 如果 nums[i] == i+1,说明正整数 i+1 存在; 第一个不匹配的 i,就是最小缺失正整数的位置。 ...

2026年1月24日 · 6 分钟 · map[name:Jeanphilo]

Hot100:除自身以外数组的乘积(Product of Array Except Self)前后缀乘积 ACERS 解析

副标题 / 摘要 除自身以外数组的乘积是典型的前后缀乘积题:不使用除法,在 O(n) 时间内完成。本文按 ACERS 结构拆解题意与算法,并给出工程迁移场景与多语言实现。 预计阅读时长:10~12 分钟 标签:Hot100、数组、前缀乘积 SEO 关键词:Product of Array Except Self, 除自身以外数组的乘积, 前缀乘积, 后缀乘积, O(n) 元描述:用前后缀乘积在 O(n) 时间内解决除自身以外数组的乘积问题,含工程场景与多语言代码。 目标读者 正在刷 Hot100 的学习者 想掌握“前后缀乘积”模型的中级开发者 需要做序列因子组合与乘积聚合的工程师 背景 / 动机 很多业务需要“排除自身的整体乘积”: 例如组合指标、冗余度评估、批量权重计算等。 若直接对每个位置做一次全数组相乘,复杂度会退化为 O(n^2); 而题目还明确禁止使用除法,因此必须依赖前后缀乘积的线性解法。 核心概念 前缀乘积:prefix[i] = nums[0] * ... * nums[i-1] 后缀乘积:suffix[i] = nums[i+1] * ... * nums[n-1] 无除法:只允许乘法与遍历 空间优化:用结果数组承载前缀,再用后缀补乘 A — Algorithm(题目与算法) 题目还原 给定一个整数数组 nums,返回数组 answer, 其中 answer[i] 等于 nums 中除了 nums[i] 之外其余各元素的乘积。 题目保证任意元素的前缀/后缀乘积都在 32 位整数范围内。 要求:不使用除法,并在 O(n) 时间内完成。 ...

2026年1月24日 · 5 分钟 · map[name:Jeanphilo]