1. 思路
2. 代码
# 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: ListNode, k: int) -> ListNode:
def reverse_node(head):
"""
翻转链表
"""
pre = None
cur = head
while cur:
next_node = cur.next
cur.next = pre
pre = cur
cur = next_node
return pre
dummy = ListNode(0) # 创建头节点,方便返回
dummy.next = head
pre = dummy
end = dummy
while end.next: # 判断end.next是否为空是为了检测end后面还有结点么
for i in range(k): # 让end走k个单位,每一步判断end是否是空结点,如果为空说明本组结点不需要翻转
if end:
end = end.next
if not end:break
start = pre.next
next_node = end.next # 防止断链
end.next = None # 断链
pre.next = reverse_node(start)# 连接
start.next = next_node # 重新连接后面的结点
pre = start # 调整pre
end = pre # 调整end
return dummy.next