§1
题目描述
每 k 个节点一组翻转,不足 k 个保持原样。
输入 = 1→2→3→4→5, k=3
输出 = 3→2→1→4→5(尾段 4,5 不足 3 不动)
§2
思路解析动画文字版
关键不是背模板,而是看懂为什么这题适合链表 · 分组反转。
1. 原链表,每 k=3 个一组:规则:从头开始每 k=3 个节点一组,就地反转;最后不足 k 个的那组保持原样。
2. 先数够 k 个:从组头往后数 k 步:1→2→3 正好凑满一组,可以反转;数的时候若碰到 null 就说明不足 k、这组不动。
3. 关键帧 · 组内指针全部掉头:关键帧:把组内 next 指针逐个掉头 —— 变成 1←2←3,新组头是 3、原头 1 变成组尾。这组先和后面断开(·)。
4. 反转好的组接回主链:接回:前驱指向新头 3,原头 1 的 next 指向下一组起点 4。group_prev 移到这组组尾 1,准备处理下一组。
5. 下一组不足 k,保持原样:下一组从 4 开始往后数:只有 4、5 两个,不足 k=3 → 整组保持原样,不反转。
6. 完成:最终结果:3→2→1→4→5。第一组反转、尾段不足 k 保留。
把这句话记住,下次遇到同类题,就能更快选出方向。
边界三连:边界三连:极端输入先过一遍。
几个高频追问,记住答法。
§3
参考代码
class Solution: def reverseKGroup(self, head, k): dummy = ListNode(0, head) group_prev = dummy while True: kth = group_prev for _ in range(k): kth = kth.next if not kth: return dummy.next group_next = kth.next prev, cur = group_next, group_prev.next while cur != group_next: tmp = cur.next cur.next = prev prev = cur cur = tmp tmp = group_prev.next group_prev.next = kth group_prev = tmp看懂代码不等于写得出。盖住上面,自己默写一遍试试。卡在哪一行说不清,就点右下角问小欧。
§4
复杂度
- 时间复杂度:O(n),每个节点恰好被「数一次 + 反转一次」,总共 n 个节点
- 空间复杂度:O(1),只用 dummy 和 groupPrev/kth/prev/cur 几个指针,迭代法无递归栈,与 n、k 无关
§5
可套用的代码模板
模板不是死背,而是提醒你写代码前先把状态、转移和边界排好。
Python
# 链表分组反转骨架(迭代,O(1) 空间)dummy = ListNode(0, head); group_prev = dummywhile True: kth = group_prev for _ in range(k): # 从 group_prev 走 k 步 kth = kth.next if not kth: return dummy.next # 不足 k,整段保持原样,结束 group_next = kth.next prev, cur = group_next, group_prev.next while cur != group_next: # 组内逐个掉头 cur.next, prev, cur = prev, cur, cur.next tmp = group_prev.next # 原头,将成为下一组的 group_prev group_prev.next = kth # 前驱接新头 group_prev = tmp§6
易错点
✗ 错误写法:不足 k 个也翻转
✓ 正确写法:先数够 k 个,不够就保持原样
题目明确尾段不足 k 不动
✗ 错误写法:反转后忘了接后继
✓ 正确写法:原头.next 要指向下一组起点
只接了新头、漏接后继,会把后半段链表整段丢掉。
✗ 错误写法:变量名和动画不一致
✓ 正确写法:代码变量沿用动画里的核心名字
学习时最怕脑内维护两套概念
§
面试追问把动画讲成自己的话
追问怎么判断凑满 K 个?
从组起点往后走 K 步,走得到说明够;碰到 null 说明不足 K、这组不翻。
追问翻转一组的指针怎么接?
用 dummy + 记每组 prev:翻转后 prev.next 接新头、组的原头接下一组、prev 前移到原头。
追问能 O(1) 空间吗?
能,迭代逐组翻转只用几个指针;递归版是 O(n/k) 栈。
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
下一题 · 链表 12/17
→相交链表
LeetCode 160 · 简单 · 沿着 链表 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
299道动画图解
37节语音讲解
28课数据结构
¥0.27折合 / 天
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
¥99 开通年卡 →
想成体系刷透这类套路?去图解算法专题