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

在链表中间插入元素时输出错误,请问对应代码哪里存在问题

链表中间插入代码错误分析

你的代码存在以下3个核心问题:

  • 链表长度计算错误
    你当前的长度统计逻辑得到的是总节点数-1,而非实际节点数量。示例:单节点链表的统计结果为0,双节点为1,完全不符合后续mid计算的基准要求。
    错误代码段:

    while (curr->next != NULL)
    {
        len++;
        curr = curr->next;
    }
    

    要统计正确长度,要么修改循环条件为while (curr != NULL),要么后续mid计算适配当前len的取值规则。

  • mid计算规则和遍历逻辑不匹配
    常规的中间插入规则为:总节点数为n时,新节点插入到第⌊n/2⌋个节点之后(1索引规则下,偶数长度插在第n/2个节点后,奇数长度插在第(n+1)/2个节点前)。按你当前得到的len = n-1的前提,计算出的mid会让curr2多移动1次,最终停在插入位置的下一个节点,而非需要操作的前驱节点。
    示例:双节点链表n=2,你的len=1,计算得到mid=1,遍历执行1次后curr2指向第二个节点,新节点插入到第二个节点之后,正确位置应该是第一个节点之后。

  • 缺少极端场景适配
    当链表长度为1时你的逻辑刚好生效,但长度>=2的链表都会出现插入位置偏移1位的问题。


修复后参考代码

Node *insertInMiddle(Node *head, int x)
{
    Node *temp = new Node(x);
    if (head == NULL)
        return temp;
    // 先计算正确的链表长度
    int len = 0;
    Node *curr = head;
    while (curr != NULL)
    {
        len++;
        curr = curr->next;
    }
    // 计算要插入位置的前驱节点索引(0索引)
    int mid = (len % 2 == 0) ? (len/2 - 1) : (len-1)/2;
    Node *curr2 = head;
    while (mid--)
        curr2 = curr2->next;
    // 执行插入
    temp->next = curr2->next;
    curr2->next = temp;
    return head;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 10:09:04