思路如下:

  1. 将链表分成k组反转,首先遍历一遍链表求取链表长度i
  2. 判断链表长度i是否大于k值,若大于将这组值进行反转
  3. 将i值减去k得到剩余i值,继续判断剩余i的长度是否大于等于k,若大于重复2,否则直接返回链表
#     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:
        Test=ListNode(-1) #定义哨兵节点,老套路了
        Test.next=head
        lend=Test.next
        i=0
        while lend:
            i=i+1 #求链表总长度
            lend=lend.next 
        print(i)
        pre = Test
        cur = pre.next
        while head and i>=k:  #分组进行判断,一组组进行反转
            for j in range(k-1):      #当前这组满足反转的
                next = cur.next
                cur.next = next.next
                next.next = pre.next
                pre.next = next
            i = i-k               #分组的思想,减去已经反转的个数,供下一次循环得到条件
            pre = cur               
            cur = pre.next
        return Test.next