题目
给定一个单链表的头节点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 = Noneself.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