UNIT 01安全重连
#203 移除链表元素
- 指针角色
- 虚拟头节点固定入口,前驱指向下一个待判断节点之前。
- 移动或重连
- 命中删除条件时绕过后继;保留时才推进前驱。
- 可达性不变量
- 前驱之前均已处理,剩余节点从前驱后继保持可达。
- 边界检查
- 连续删除和删除头节点使用相同逻辑。
迁移 · #83 删除排序链表中的重复元素有序链表去重把删除条件改为相邻节点值相同。
先说清契约,再独立实现进入本单元 ↗
Unit 00 · 链表、指针与可达性基础
真正发生变化的不是节点在画布上的位置,而是节点字段中保存的引用。本单元先建立节点身份、指针、边、可达性和现场保存,再预览后续所有常见链表概念。
next 边;head 出发的可达性,识别失联节点与意外环;节点身份是对象本身。两个节点即使 value 相同,也可能是完全不同的节点。
head、current 等变量只保存节点引用。移动变量不等于改变链表结构。
修改 node.next 才会改变链表的有向连接;动画必须表现边变化,而非节点交换位置。
从返回入口沿 next 能访问到的节点才属于当前结果链。失去所有入口的节点会失联。
链表:看清节点之间的连接,练习指针操作与局部改写。
这里的梯度描述认知任务的递进,不等同于题库的难度标签。点击题目可进入对应单元。
固定间距、倍速与同速对齐承担不同定位任务。
用同一组问题定位每个单元,再观察迁移题改变了哪个条件。进入写代码环节后,学习地图会收起,留出独立思考的空间。
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_demo(head):
previous = None
current = head
while current:
next_node = current.next
current.next = previous
previous = current
current = next_node
return previous
面对链表题时,先画出节点身份和当前边;明确返回入口与未处理入口;在覆盖 next 前保存仍需访问的引用;改边后重新检查从入口可达的节点、是否失联以及是否成环。
页面会停留在这里。你可以继续复习任意阶段,或在准备好之后手动打开 Unit 01。刷新页面也会回到当前进度。