# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param head ListNode类 
# @param k int整型 
# @return ListNode类
#
class Solution:
    def reversSGroup(self ,head:ListNode, m:int ,n :int) -> ListNode:
        #涉及链表反转,设置哨兵节点
        st = ListNode(-1)
        st.next = head #将传入节点合并至哨兵节点后
        pre = st 
        for _ in range(m-1): #将链表反转节点设置为 m 的前驱节点
            pre = pre.next
        cur = pre.next # 将链表的反转节点设置为反转时的当前节点
        for _ in range(n - m) : # n-m 需要调动的节点个数
            temp = cur.next 
            cur.next = temp.next
            temp.next = pre.next
            pre.next = temp
        return st.next

    def reverseKGroup(self , head: ListNode, k: int) -> ListNode:
        #遍历传入的链表,确定链表中节点个数
        an = 1
        cur = head
        if cur == None :
            return head
        while cur.next :
            cur = cur.next
            an += 1
        if an < k : #如果传入链表个数小于 k 的情况 直接返回传入链表
            return head
        cur = head
        for i in range(an+1):
            if i % k == 0 and i != 0:
                cur = self.reversSGroup(cur,i-k+1,i)
        return cur