题目
给定一个单链表的头节点head,和一个正数k实现k个节点的小组内部逆序,如果最后一组不够k个就不调整
例子:
调整前:1->2->3->4->5->6->7->8,k=3
调整后:3->2->1->6->5->4->7->8
tips:功能拆分:获取当前组的结尾节点、反转、拼接
- 定义链表
"""单链表"""
class ListNode:
def __init__(self, value):
self.next = None
self.val = value
- 获取当前组的结尾节点
def get_end(node, k):
while k > 1 and node:
node = node.next
k -= 1
return node
- 反转
def reverse(start, end):
end = end.next
prev = None
cur = start
while cur != end:
next = cur.next
cur.next = prev
prev = cur
cur = next
start.next = end
- 拼接
def reverse_all(head, k):
start = head
end = get_end(head, k)
if end is None:
return head
head = end
reverse(start, end)
last_end = start
while last_end.next:
start = last_end.next
end = get_end(start, k)
if end is None:
return head
reverse(start, end)
last_end.next = end
last_end = start
return head
浙公网安备 33010602011771号