LeetCode-链表过滤(dummy + prev + curr)
🧠 链表过滤(dummy + prev + curr)通过遍历链表,将满足特定条件(如值等于 target)的节点通过修改指针“跳过”并移除,从而得到一个清洗后的新链表
一句话结论:
👉 LeetCode 中 所有可能删除头节点的链表题
👉 本质上 都可以反向映射为同一个删除模板
⭐ 模板
建立虚拟头,处理边界
//创建 dummy 节点,dummy.next 指向 head
ListNode dummy = new ListNode(0,head);创建探险家 curr 和接线员
prev 指向 dummy // 当前已经确认保留链表的最后一个节点
curr 指向 head // 当前正在判断的节点遍历链表
while (curr != null) {
if (curr 满足【删除条件】) {
//【核心动作】:剪断链接!
// 让 prev 的指针越过 curr,直接连到 curr 的下一位
prev.next = curr.next// 注意:此时 prev 不要动!因为新接过来的 prev.next 还没检查过,下一轮循环要检查它
}
else (不需要删除):{
//更新 prev
prev = curr
}//【迭代】:无论删没删,探险家都要去下一个地方看看
curr = curr.next}
返回结果
return dummy.next
三大角色(必须先记住)
dummy -> prev -> curr -> curr->next -> …
| 指针 | 角色 | 一句话职责 |
|---|---|---|
| dummy | 哨兵节点 | 保住链表入口,统一头删 |
| prev | 接线员 | 指向最后一个“已确认保留”的节点 |
| curr | 探险家 | 当前正在判断删不删的节点 |
👉 核心口诀:
- ✅ curr 每轮都要前进
- ❌ prev 只有在 curr 被保留时才前进
相关练习题
1. LeetCode 203. 移除链表元素
题意: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
2. LeetCode 83. 删除排序链表中的重复元素
题意: 删除排序链表中的重复元素,只保留一个元素。
3. LeetCode 82. 删除排序链表中的重复元素 II
题意: 删除排序链表中的所有重复元素,只保留没有重复的节点。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Fliex!
评论

