题目描述(困难难度)
解题思路
这是一道真题
确定链表中长度为k的有几组,然后循环,每组内部再循环,注意奇偶数,cishu = k//2,取左中位数
python 代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
tem = ListNode(-1)
p = tem
a = []
while head:
a.append(head.val)
head = head.next
# 计算有几组需要循环
b = len(a)//k
# 如果只有一组需要循环
if b == 1:
a = self.aa(a,0,k-1,k)
# 有两组或者三组以上需要循环
else:
for i in range(0,k*b,k):
a = self.aa(a,i,i+k-1,k)
# 循环完成之后重建链表
for j in a:
p.next = ListNode(j)
p = p.next
return tem.next
def aa(self,a,i,j,k):
for _ in range(k//2):
a[i],a[j]=a[j],a[i]
i += 1
j -=1
return a
s = Solution()
res = s.reverseKGroup(1->2->3->4->5, 2)
print(res) # 2->1->4->3->5