开始前应具备
- 理解对象引用和空指针
- 掌握快慢指针
- 能画出节点之间的连接
CHAPTER 05 · 结构操作
训练指针关系、先进后出和先进先出,理解线性结构的不同约束。
BEFORE LEARNING
链表训练引用关系,栈和队列训练处理顺序。它们共同要求你把“尚未完成的状态”显式保存下来。
开始前应具备
完成本章后
CORE LESSONS
LESSON
需要反转、删除、合并链表节点,尤其头结点也可能改变时使用 dummy 简化分支。
链表操作的难点不是遍历,而是修改连接时不丢失剩余部分。虚拟头结点让头部操作和中间节点操作使用同一套逻辑。
dummy.next = head
prev, current = None, head
while current:
next_node = current.next
current.next = prev
prev, current = current, next_nodeLESSON
需要找中点、倒数位置或判断环,但无法通过下标随机访问链表。
快慢指针利用不同速度制造相对位移。检测环时,若存在环,两者会在环内相遇;删除倒数节点时,固定间距让慢指针停在目标前驱。
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.nextLESSON
需要匹配最近元素、撤销操作,或寻找左/右侧第一个更大更小时使用。
普通栈保存嵌套关系,单调栈保存尚未找到答案的候选下标。新元素到来时,能被它解决的候选依次弹出。
stack = []
for i, value in enumerate(a):
while stack and resolves(a[stack[-1]], value):
j = stack.pop(); answer[j] = i - j
stack.append(i)READING
先读完本站讲义并尝试练习;遇到推导不清的地方,再回到原始教程深入阅读。
PRACTICE LADDER
题量由知识点决定,不再固定为 5 道。先完成“入门”和“模板”,再做变式与综合;挑战题可以留到复习阶段。
2 道 · 依次完成
Reverse Linked List
为什么选:掌握保存 next 与三指针重连。
Merge Two Sorted Lists
为什么选:用 dummy 统一头结点和中间节点的拼接。
2 道 · 依次完成
Linked List Cycle
为什么选:通过速度差理解环内相遇。
Remove Nth Node From End
为什么选:固定指针间距并删除目标前驱的 next。
3 道 · 依次完成
Valid Parentheses
为什么选:用栈保存尚未匹配的左括号。
Min Stack
为什么选:让辅助状态与主栈同步更新。
Daily Temperatures
为什么选:用单调栈批量解决尚未找到更高温度的位置。
PERSONAL NOTEBOOK
笔记保存在当前浏览器