You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按给定大小k分组反转链表,现有代码输出异常如何正确实现?

问题分析

你现有代码的核心问题是没有预先判断剩余节点数量是否满足k个的要求,只要还有节点就会执行反转逻辑,哪怕最后一组不足k个也会被反转,这就是你得到不符合预期输出的原因:比如你测试用例应该是输入链表[1,2,3,4,5]、k=3的场景,按照要求最后剩余的2个节点[4,5]应该保持原有顺序,但你的代码把这两个也反转成了[5,4],所以最终输出[3,2,1,5,4],和预期的[3,2,1,4,5]不符。

正确实现步骤

  • 首先遍历当前头节点往后的k个节点,确认剩余节点数≥k,如果不足直接返回当前头节点,不做任何修改
  • 若节点数足够,执行k个节点的反转操作
  • 将反转后的当前组的尾节点(即反转前的头节点)的next指针,指向递归处理后续节点返回的结果
  • 返回当前组反转后的新头节点

修正后代码

class Solution
{
    public static Node reverse(Node head, int k)
    {
        // 先判断剩余节点是否够k个
        Node check = head;
        int count = 0;
        while (check != null && count < k) {
            check = check.next;
            count++;
        }
        // 不足k个直接返回原头节点
        if (count < k) {
            return head;
        }
        
        // 够k个再执行反转逻辑
        Node prev = null;
        Node curr = head;
        int c = 0;
        while(curr != null && c < k ) {
            Node next = curr.next;
            curr.next = prev;
            prev = curr;
            curr = next;
            c++;
        }
        // 递归处理后续节点,原头节点现在是当前组尾节点,对接后续处理结果
        if(curr != null) {
            head.next = reverse(curr,k);
        }
        return prev;
    }
}

内容的提问来源于stack exchange,提问作者jerry22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:57:01