从三指针翻转到 K 个一组分组反转,链表所有套路一路打通,面试中遇到链表题不再发蒙
链表题失分的根源不是不会,而是套路碎片化——这次遇到反转会做,下次换成「局部反转」就卡壳。这条路径把链表拆成三个递进阶段:先夯实基础指针操作,再系统训练快慢指针的双指针思维,最后攻克复杂指针重连与综合设计。走完之后,任何链表变体都能拆解成这几个已知模块的组合。
适合:想把链表一类彻底吃透的人
本阶段核心是两个可复用模板:①prev/cur/next 三指针就地翻转;②dummy 虚拟头节点统一处理头部边界(删除/插入头节点不再需要特判)。这两个模板是后续所有复杂操作的基石。
开篇:建立 prev/cur/next 三指针就地翻转的肌肉记忆,每轮先保存 cur.next,再把 cur.next 指向 prev,最后整体右移。
引入 dummy 虚拟头节点:头节点也可能是删除目标,dummy 让所有删除统一走 prev.next = cur.next,消灭头部边界。
同样用 dummy + 单指针遍历的框架,但条件从「值等于目标」变为「与下一节点值相同」,巩固 dummy 模板在删除类题中的通用写法。
从单链表操作升级到双链表合并:dummy 头节点依然统一边界,同时引入双指针各自向前推进的思路——这是后续快慢指针双轨并进模式的前驱形态。
上一题双指针同步推进做有序合并;这题同样双轨并进,核心变成进位模拟:carry 贯穿全程,长度不等时补零继续。
快慢指针(slow 每次走 1 步,fast 每次走 2 步)是链表专属的双指针变种:速差恒为 1 步/轮,可以精确定位链表中点、判断环的存在、找到环入口、以及从尾部反向定位第 N 个节点。本阶段系统打通这一族题的统一思维模型。
快慢指针入门:slow 走 1 步、fast 走 2 步,fast 到尾时 slow 恰好在中点。速差=1 的时序是后续判环、倒数定位的共同基础。
同一对快慢指针用于判环:有环时 fast 在环里绕圈必然追上 slow,与上一题「无环 fast 先到 null」形成对比,结论相反。
在 slow/fast 相遇后,从头再发一个指针与 slow 同步走,相遇点即环入口——直接复用判环相遇的数学结论。
快慢指针变体为「间距=N」:fast 先走 N 步再同速并进,fast 到尾时 slow 在倒数 N+1 处,结合 dummy 完成删除。
两指针各自走完本链表后切换到对方继续,总路程相同时必在交点相遇——仍是双指针同步推进,无交点则同时到 null。
本阶段的题不再是单一操作,而是「找中点 + 翻转 + 合并」等多个已知模块的组合,或需要在翻转过程中精确定位子链表的头尾四个指针。熟练后应能把任意链表难题拆解为里程碑 1/2 的子步骤。
局部版三指针翻转:走到起点前驱,翻转 right-left+1 次,再把前驱和后继接回。四个关键指针须先画图再写代码。
K=2 的局部翻转:每轮四步指针重连处理两个节点,是 reverse-nodes-in-k-group 的热身特例,先掌握 K=2 的手动模拟。
K 任意:先计数判断剩余够 K 个,够则调用里程碑 1 的翻转内核,不够则保留原序——把「翻转」作为子函数复用。
三步组合:快慢指针找中点 + 三指针翻转后半段 + 双指针交叉合并,里程碑 1/2 的核心模板均需同时内化。
与上一题步骤高度相似(找中点 + 翻转后半 + 逐节点比较),但有一个细节:奇数长度时 slow 停在正中节点需跳过。两题对比做,强化「多模块组合」的拆解习惯。
归并排序链表版:快慢指针找中点 + 递归排左右 + merge 合并有序段,三个子步骤均已单独练过,考验串联能力。