# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseKGroup(self , head , k ):
# write code here
dum = ListNode(-1) # 定义伪头节点,便于操作
dum.next = head
pre = cur = dum
# 统计原链表长度n,从-1开始是因为计算的dum节点的长度
# dum链表的长度比原链表长度多一
n = -1
while cur:
cur = cur.next # cur已经移动到链表尾部了
n += 1
# 只要还有多余k个的链表节点数量,则进行反转
# 不足k个则停止
while n >= k:
cur = pre.next
# 长度为k的链表需要k-1次反转
# 每次把k中第i个节点移动到当前这个子链表的最前面,共k-1次
for _ in range(k-1):
last = cur.next
cur.next = last.next
last.next = pre.next
pre.next = last
pre = cur # 子链表头更新:当前子链表的头节点更改为新的子链表的开头节点
n -= k
return dum.next
25. 链表中的节点每 K 个一组翻转(Hard)
于 2021-03-08 15:04:43 首次发布