Just do it
专注做自己的事,有想做的事就去做好了

题目

给定一个单链表的头节点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
posted on 2025-10-03 17:09  Ireck  阅读(11)  评论(0)    收藏  举报