# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param head ListNode类 
# @param k int整型 
# @return ListNode类
#
class Solution:
    def reverseKGroup(self , head: ListNode, k: int) -> ListNode:
        # write code here
        new_head = ListNode(-1)
        new_head.next = head
        pre_node = new_head
        while True and pre_node:
            current_node = pre_node.next
            last_node = current_node
            for i in range(1,k):
                if not last_node:
                    return new_head.next
                last_node = last_node.next
            if not last_node:
                return new_head.next
            next_node = last_node.next
            a,b = self.reverse(current_node,last_node)
            pre_node.next = a
            b.next = next_node
            pre_node = b
        return new_head.next
    
    def reverse(self,a,b):
        new_head = ListNode(-1)
        temp = a 
        b.next = None
        while temp:
            new_temp = temp.next
            temp.next = new_head.next
            new_head.next = temp
            temp = new_temp
        return b,a