← 返回算法与AI总览 算法与AI · 知识点深化 · 链表反转与技巧:哑节点、快慢指针、环检测
算法与AI · 知识点深化 · 数据结构

链表反转与技巧:哑节点、快慢指针、环检测

链表题看着简单,指针一绕就错。反转链表是必考题,哑节点统一头节点处理,快慢指针找中点、判环、找倒数第 k 个。这一页把链表高频套路讲透。

① 怎么学(4 步走,约 60 分钟)

先建立直觉再抠细节,按这四步走最稳:

1看图建立直觉(10 分钟)
读②③:先在脑子里画出本课核心结构图。
2记完整体系(15 分钟)
读④:把对比表和公式看懂,不要急着背。
3跟例题走一遍(20 分钟)
精读⑤:看三个例题怎么用知识点解题。
4刷题纠错(剩余时间)
做⑦⑩,错题回⑥诊断。
本课小目标学完你要能:① 手写反转链表;② 用哑节点简化;③ 快慢指针三类用法;④ 判环找入口。

② 一图看懂:链表技巧全景

链表技巧 哑节点 dummy 统一头节点 反转 三指针迭代 快慢指针 中点/倒数k/判环 环 Floyd 算法 应用:链表/树相关题 LeetCode 高频 易错:改了 next 断链 先存下一个再改
读法:中心是本课主题,四条分支展开核心维度,下方是典型应用与高频易错点。

③ 本质直觉:链表就是"手拉手找下一个"

链表每个节点存 val 和 next 指针。问题在于改 next 之前要先存好下一个节点,否则链就断了。

反转:用 prev/curr/next 三指针。每次让 curr.next 指向 prev,然后三个指针前移。

哑节点:在 head 前面加一个 dummy,所有操作都有前驱,不用单独处理头节点。

快慢指针:快的一次走两步,慢的一步。快到终点慢正好在中点;相遇说明有环。

1 2 3 4 反转:prev<-curr next=curr.next 前移
判环找入口快慢相遇后,一个指针回 head,两个同步走,相遇点就是环入口。

④ 完整知识体系

高频技巧

技巧解决问题时间
哑节点头节点可能变化O(n)
三指针反转反转链表O(n)
快慢指针找中点O(n)
快慢判环有没有环O(n)
Floyd找环入口O(n)
迭代反转prev=null; while(curr){next=curr.next; curr.next=prev; prev=curr; curr=next}
找中点fast=head; while(fast && fast.next){slow=slow.next; fast=fast.next.next}

为什么要先存 next

curr.next = prev 之后,原来的 curr.next 就丢了。所以要先 next = curr.next 存下来。

⑤ 应用场景与例题

例1 反转链表 1->2->3->4
prev=null。1.next=null; 2.next=1; 3.next=2; 4.next=3。结果 4->3->2->1。
例2 找链表中点
fast 走两步 slow 一步。fast 到尾 slow 在中点。偶数个时 slow 在后半段开头。
例3 有环链表找入口
快慢相遇后,一个回 head,同步同速走,再次相遇就是入口。
做题心法改 next 前先存下一个;需要前驱就上哑节点。

⑥ 高频错误诊断(4 条)

错误1:改 next 前没存 next链断了,后面节点丢了。
错误2:不用哑节点处理头节点变化删除/反转头节点要单独判断,容易漏。
错误3:找中点 fast 越界while(fast && fast.next) 判空。
错误4:判环相遇直接当入口相遇点不是入口,要再走一遍。

⑦ 考点真题演练(5 题)

考点分布

考法出题形式应对
反转问时间复杂度O(n)
哑节点问作用统一头节点处理
快慢问找中点fast两步slow一步
环问入口怎么找Floyd

真题basic1. 反转链表的时间复杂度?

真题mid2. 反转链表时为什么要先存 next?

真题mid3. 快慢指针找中点,fast 走几步?

真题hard4. 快慢指针相遇后找环入口,正确做法?

真题hard5. 哑节点 dummy 的作用是?

⑧ 必背知识点卡

反转:prev/curr/next 三指针 先存 next
哑节点:head 前加 dummy 统一边界
找中点:fast 两步 slow 一步
判环:快慢相遇有环
环入口:相遇后回 head 同速走
倒数 k:fast 先走 k 步再同步
合并:两个 dummy 比较接小者

⑨ 动手输出:手写反转链表

场景:面试白板写反转。
① 初始化:prev=null, curr=head。
② 循环:next=curr.next 存下一个。
③ 反转:curr.next=prev。
④ 前移:prev=curr, curr=next。
⑤ 返回:prev 是新头。
口述思路先存 next 再反转,最后 prev 是新头。

⑩ 分层练习(基础 + 中档 + 拔高)

▍基础 6 题

基础1反转链表用几个指针?
三个 prev/curr/next。
基础2哑节点作用?
统一头节点处理。
基础3找中点 fast 走几步?
两步。
基础4有环怎么判断?
快慢指针是否相遇。
基础5倒数第 k 个怎么找?
fast 先走 k 步。
基础6反转时间复杂度?
O(n)。

▍中档 5 题

中档1为什么改 next 前存 next?
否则后续链丢失。
中档2偶数节点中点在哪个?
slow 在后半段开头。
中档3删除倒数第 n 个节点?
fast 先走 n+1 步再同步。
中档4环入口数学原理?
相遇后 head 到入口距离=相遇点到入口。
中档5合并两个有序链表?
dummy 接较小者。

▍拔高 5 题

拔高1递归反转链表怎么写?
reverse(head.next) 后接 head.next.next=head。
拔高2链表有环怎么求环长?
相遇后再走一圈计数。
拔高3回文链表怎么判断?
快慢找中点,反转后半段比较。
拔高4两个链表相交找交点?
走到头后换到对方头,相遇即交点。
拔高5K 个一组反转?
计数 k 个反转,递归下一组。

⑪ 记忆口诀 + 7 天复习计划

三句口诀① 三指针反转先存 next,哑节点统一边界。② 快慢两步找中点,相遇有环再找入口。③ 倒数 k 先让 fast 走 k 步。
天任务自检
第 1 天读②③,手写反转代码三指针写对
第 2 天背技巧表 + 基础 6 题套路记住
第 3 天做中档 5 题,写找中点边界对
第 4 天做拔高 5 题,写环入口数学理解
第 5 天做⑦真题 5 题限时每题 5 分钟
第 6-7 天合书白板写反转不看资料

← 返回算法与AI总览