K 个一组翻转链表
Reverse Nodes in k-Group
本机进度仅保存在当前浏览器
题目描述
给你链表的头节点 head,每 k 个节点一组进行翻转,请你返回修改后的链表。节点总数不是 k 的整数倍时,最后剩余节点保持原有顺序。要求只使用常数额外空间,不能只改节点值。
示例:1 -> 2 -> 3 -> 4 -> 5,k = 3,输出 3 -> 2 -> 1 -> 4 -> 5。
解题思路
- 分组处理:先从当前组头探测是否凑满 k 个节点,不足则直接结束。
- 凑满则对这一组内部执行标准反转(同 206 题),返回新的组头与组尾。
- 把上一组的组尾接到新组头,再从原组尾(新组尾)继续处理下一组;用哑节点统一第一组的接法。
- 关键细节:探测与反转都要小心保持对"下一组起点"的引用,防止断链丢失。
参考实现
查看参考实现Python · 建议先自行作答
def reverseKGroup(head, k):
dummy = ListNode(0, head)
prev_group = dummy
while True:
# 探测本组第 k 个节点是否还存在
end = prev_group
for _ in range(k):
end = end.next
if not end:
return dummy.next
start = prev_group.next
nxt_group = end.next
# 组内反转 [start, end]
prev, cur = nxt_group, start
while cur != nxt_group:
tmp = cur.next
cur.next = prev
prev = cur
cur = tmp
prev_group.next = end
prev_group = start