关于Linked List的算法,它们的核心可以归纳成几个关键思想
1. 指针操作
链表本质上就是一串节点(Node),每个节点包含数据和指向下一个(单链表)或前后(双链表)的指针
所以链表算法的核心几乎都围绕指针如何移动和修改
- 插入节点 -> 改变前一个节点的
next指向新节点 - 删除节点 -> 改变前一个节点的
next跳过被删除节点 - 反转链表 -> 一个节点一个节点地改
next指向前一个节点 - 环检测 -> 快慢指针操作
几乎所有错误都出在指针没更新好或断链
2. 边界条件处理
链表操作很容易出错的地方是头节点、尾节点或空链表
- 插入或删除头节点
- 删除尾节点或单节点链表
- 空链表、只有一个节点的链表
这些情况必须单独考虑,否则算法容易崩
3. 双指针/快慢指针思想
4. 递归/迭代
链表天然适合递归
- 反转链表可以用递归
- 合并两个有序链表可以用递归
- 删除倒数第k个节点也可以用递归
迭代通常更高效,单递归写法更直观
5. 抽象成问题再解决
不要死记操作,把问题抽象成
- 我想把这个节点移到哪里
- 我想找到中间节点
- 我想断掉环
链表算法很多都是移动指针 + 特殊节点处理 + 循环/递归遍历的组合
链表相关算法
- 链表反转(Reverse Linked List)
- 快慢指针(Floyd思想)
- 删除倒数第N个节点
- 合并两个有序链表
- 判断链表是否回文
- 两两交换节点(Swap Nodes in Pairs)
- K个一组反转链表
- LRU Cache(链表 + 哈希表)
- 侵入式链表(Intrusive List)
- 空闲链表(Free List)
- 链表排序
- 链表相交判断
- 判断链表是否有环