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

C语言链表插入操作异常 printNodes无法打印前两个节点问题求助

问题根因

你的代码核心错误出在insertEnd函数的返回值逻辑:

  • 该函数声明的返回值类型为struct node *,但仅在head == NULL(链表为空,插入第一个节点)的分支返回了新建节点指针
  • 当链表非空完成尾插操作后,没有主动返回任何值,此时你调用head = insertEnd(xxx, head)赋值时,写入head的是内存中的不确定野值,直接把原合法头指针覆盖为非法地址,导致前面的节点地址丢失,自然无法打印前两个节点的信息。
修复方法

仅需要在insertEnd函数的非空分支末尾,补充返回原头指针即可,修改后的代码如下:

struct node *insertEnd(int data, struct node *head)
{
    struct node *temp = makeNode(data);
    if (head == NULL)
    {
        return temp;
    }

    struct node *loop = head;
    while (loop->next)
    {
        loop = loop->next;
    }
    loop->next = temp;
    return head; // 补充返回原头指针
}
额外优化建议
  • 可以在makeNode函数中对malloc的返回值做判空处理,避免内存申请失败时的空指针访问风险
  • 程序结束后可以遍历链表释放所有申请的堆内存,避免内存泄漏

修改后重新运行即可正常输出所有节点信息,末尾打印头节点数据的语句也能正常输出5。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:54:02