| 题目 | 思路 | 备注 |
|---|---|---|
| 删除链表中的节点 | 直接修改当前节点的val值和next指向 | |
| 删除链表中倒数第N个节点 | 同向快慢双指针 | |
| 反转链表 | 原地变换指针 | 二个节点(pre, cur),四句代码(保存next,cur指向pre,更新pre, 更新cur) |
| K个一组反转链表 | 与反转链表思路类似, 只不过在翻转完k个节点后,要加一个递归继续处理后续的链表节点: - 先将前k个翻转后,再递归的将后边n-k个处理掉即可。(注意检查不足k个时不用翻转) |
![]() |
| 合并两个有序链表 | 顺序迭代&比较即可 | |
| 回文链表 | 反转一半链表、或进栈一半链表 | |
| 环形链表 | 同向快慢双指针,指针相遇时表明有环 | |
| 两数相加 | 两链表对应节点相加即可。注意判空、记录进位等 | |
| 奇偶链表 | 声明两个新链表分别链接奇偶节点,最后链接到一起即可 | |
| 相交链表 | 求交点,两个链表交叉迭代,直到遇到相等节点即可。(原理: m+n = n+m) | |
| 合并K个排序链表 | 分治+递归: 1. 把k个链表首尾两两合并,变成k/2个链表,依次递归 1. 子问题:合并2个有序链表 |
![]() |
| 排序链表 | 归并排序法,通过快慢指针找到链表中点,把链表分为:[head, mid) 与[mid, tail)两个部分, 然后将这两个部分进行合并即可,问题转化为:合并2个有序链表 | ![]() |
| 复制带随机指针的链表 | 用一个HashMap保存 |
![]() |




