思路如下:
- 将链表分成k组反转,首先遍历一遍链表求取链表长度i
- 判断链表长度i是否大于k值,若大于将这组值进行反转
- 将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