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

链表偶数位置元素移至奇数位置后代码触发段错误如何解决

问题根因

你代码中的段错误触发在奇数长度链表的场景下,核心原因是:
当链表总节点数为奇数时,循环逻辑执行结束后even指针会被赋值为NULL,此时你直接访问even->next赋值属于空指针访问,直接触发内存违规。

以7节点的测试用例为例,循环执行到最后一轮时:

  • odd指针走到第7个节点(最后一个奇数位节点),odd->next = NULL
  • 执行even->next = odd->next后,even会被赋值为NULL
  • 后续进入if (odd->next == NULL)分支时,直接操作even->next就会触发崩溃
修复方案

需要做两处调整:

  1. 函数开头增加边界校验,处理空链表、仅1个节点的极端场景,避免无意义的执行逻辑
  2. 给even->next赋值前,先判断even指针非空,再执行赋值操作

修改后的EvenOdd函数代码如下:

void EvenOdd(node *&head)
{
    // 新增边界判断:空链表或只有1个节点无需重排
    if (head == NULL || head->next == NULL) {
        return;
    }
    node *odd = head;
    node *even = head->next;
    node *evenStart = even;

    while (odd->next != NULL && even->next != NULL)
    {
        odd->next = even->next;
        odd = odd->next;
        even->next = odd->next;
        even = even->next;
    }
    // 仅当even非空时才赋值next为NULL
    if (odd->next == NULL && even != NULL)
    {
        even->next = NULL;
    }
    odd->next = evenStart;
}
验证效果

修改后两个测试用例均可正常运行:

  • 6节点偶数长度输入:{1,2,3,4,5,6} → 输出 1 3 5 2 4 6
  • 7节点奇数长度输入:{1,2,3,4,5,6,7} → 输出 1 3 5 7 2 4 6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 14:45:02