ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

K个节点的组内逆序调整

K个节点的组内逆序调整

题目

给定一个单链表的头节点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
返回列表