链表算法题分类解析
1. 遍历访问类(虚拟头结点技巧)
核心解题思路:当需要对链表的头结点进行插入或删除操作时,使用 dummy 节点可以避免单独处理头结点的特殊情况,让代码更简洁统一。
| 难度 | 题目 | 题号 | 核心思路简介 |
|---|---|---|---|
| 简单 | 移除链表元素 | 203 | 使用 dummy 节点统一处理头结点删除的情况 |
| 简单 | 删除排序链表中的重复元素 | 83 | 遍历链表,遇到相同值的节点就跳过 |
| 中等 | 删除排序链表中的重复元素 II | 82 | 只要重复就全部删除,需要记录前驱节点 |
| 中等 | 重排链表 | 143 | 综合题:找中点 + 反转 + 合并 |
2. 反转类(指针修改的核心考点)
核心解题思路:反转链表是链表题中指针修改最典型的代表。掌握反转任意一段链表的能力可以解决一大类问题。
| 难度 | 题目 | 题号 | 核心思路简介 |
|---|---|---|---|
| 简单 | 反转链表 | 206 | 迭代(双指针)和递归两种写法都要掌握 |
| 中等 | 反转链表 II | 92 | 反转从位置 m 到 n 的链表,需要记录前后断点 |
| 中等 | 回文链表 | 234 | 快慢指针找中点 + 反转后半部分 + 比较 |
| 困难 | K 个一组翻转链表 | 25 | 先实现反转一段的函数,然后分组处理 |
3. 双指针技巧类(快慢指针 / 前后指针)
核心解题思路:双指针可以在一次遍历中解决找中点、倒数第K个、环检测等问题,避免多次遍历链表。
| 难度 | 题目 | 题号 | 核心思路简介 |
|---|---|---|---|
| 简单 | 链表的中间结点 | 876 | 快指针走两步,慢指针走一步,快指针到终点时慢指针在中点 |
| 简单 | 环形链表 | 141 | 快慢指针,如果相遇则有环 |
| 中等 | 环形链表 II | 142 | 找到相遇点后,从头和相遇点同步走,相遇处即环入口 |
| 简单 | 相交链表 | 160 | 双指针分别遍历,走到头后交换路线,相遇点即交点 |
| 中等 | 删除链表的倒数第 N 个结点 | 19 | 快指针先走N步,然后快慢一起走,慢指针指向待删节点的前驱 |
4. 链表合并与分解
核心解题思路:链表的第二个核心考点——链表的拼接。通过操作指针将多个链表连接起来。
| 难度 | 题目 | 题号 | 核心思路简介 |
|---|---|---|---|
| 简单 | 合并两个有序链表 | 21 | 双指针比较,依次接入新链表 |
| 中等 | 分隔链表 | 86 | 用两个 dummy 链表分别收集小于 x 和大于等于 x 的节点,最后合并 |
| 中等 | 奇偶链表 | 328 | 将奇数位节点和偶数位节点分开后合并 |
| 中等 | 两数相加 | 2 | 模拟加法,注意进位处理 |
| 困难 | 合并 K 个升序链表 | 23 | 可以用优先队列(最小堆)或分治合并 |
5. 复杂结构类(带随机指针 / 多级指针)
核心解题思路:考察对链表结构的深拷贝能力,以及如何处理特殊指针。通常有哈希表缓存和原地复制两种解法。
| 难度 | 题目 | 题号 | 核心思路简介 |
|---|---|---|---|
| 中等 | 复制带随机指针的链表 | 138 | 法1:用 Map 缓存新旧节点映射;法2:原地复制拆分 |
| 中等 | 扁平化多级双向链表 | 430 | 递归或栈处理,将子链表插入到当前节点之后 |
6. 排序与旋转
核心解题思路:在链表上进行排序和旋转操作,需要同时结合查找、修改指针等多种技巧。
| 难度 | 题目 | 题号 | 核心思路简介 |
|---|---|---|---|
| 中等 | 排序链表 | 148 | 归并排序(找中点 + 递归排序 + 合并) |
| 中等 | 旋转链表 | 61 | 先成环,然后根据 k 找到新头尾断开 |
| 中等 | 两两交换链表中的节点 | 24 | 递归或迭代,操作三个节点的指针 |
链表刷题核心心法
- 一定要画图:指针操作很容易乱,动手画一画每一步的指向关系。
- 两个考点:指针修改(如反转)和链表拼接(如合并)。
- 虚拟头结点(dummy node):当需要操作头结点(删除或插入)时,用 dummy 统一逻辑。
- 边界检查:注意空链表、只有一个节点、k 大于链表长度等情况。