图解算法通识讲义线性结构

链表基石与哨兵指针设计

核心心智模型:穿针引线,哨兵保底;断链前必先留后路,虚拟头节点化解一切空指针边界。

核心交互式算法图解演练沙盒
链表双指针模型

单链表三指针就地反转演练

步骤 1 / 5
prev:null
curr:Node(1)
next:Node(2)
执行: next=curr.next; curr.next=prev
curr
1
2
3
4
5
口诀:先存 next,再指 prev;prev 走一步,curr 走一步空间 O(1) · 时间 O(N)

初始化指针:prev=null, curr=Node(1), 预先暂存 next=curr.next (Node 2) 防止链表断裂失联。

关键操作与时空复杂度速查对照表
操作 / 算法阶段平均时间最坏时间空间复杂度核心底层机制
头部插入 / 删除O(1)O(1)O(1)修改指针引用即可,无需数组的数据整体搬迁。
按序查找 / 随机访问O(N)O(N)O(1)无法利用索引随机寻址,必须循链推进。
template.java
ListNode dummy = new ListNode(0, head);
ListNode curr = dummy;
while (curr.next != null) {
    if (curr.next.val == val) {
        curr.next = curr.next.next;
    } else {
        curr = curr.next;
    }
}
return dummy.next;
解题核心心法提炼
  • 任何涉及头节点可能被删除或变更的题目,第一行必建 dummyHead。
  • 快慢指针解决判环(Floyd 判圈算法)与查找倒数第 K 个节点。
  • LRU 缓存机制将哈希表与双向链表结合,达成 O(1) 的存取与访问顺序更新。
常见踩坑警示与避坑指南
  • 丢失 next 指针:在没有缓存的情况下直接赋值 curr.next = ... 导致链表后半段断裂。
  • 环形链表遍历时缺少 fast.next != null 检查,抛出空指针异常。

对应 Hot 100 实战题目突围

原理已掌握!立即进入沉浸式工作台开始实战演练,强化代码肌肉记忆

查看全部题目