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

为什么我编写的C++链表程序运行后没有任何输出?

问题原因分析

核心问题是addFront函数的头节点参数采用了值传递,修改的仅为函数内的局部变量,全局头指针从未被正确更新:

  • 你定义的全局变量Node *head默认初始化为NULL,调用addFront时,空指针按值传入函数,函数内部的head参数只是全局head的临时副本。
  • 函数末尾执行head = temp;仅修改了局部副本的值,全局head变量全程都保持为NULL,没有任何变化。
  • 后续调用traverse(head)时,传入的是仍然为NULL的全局头指针,循环判断temp!=NULL直接不成立,因此不会有任何输出。
修复方案

有两种常用的修复方式可选:

方式1:修改addFront参数为指针的引用(C++特性)

使用*&表示传入指针的引用,函数内对head的修改会直接作用到外部传入的原指针上:

// 仅修改函数定义的参数部分即可
void addFront(Node *&head, int item)
{
    Node *temp = new Node();
    temp->data = item;
    temp->next = head;
    head = temp;
}

方式2:传入头指针的二级指针

如果不想使用引用特性,也可以传入头指针的地址,通过二级指针修改原头指针的值:

// 修改函数定义为二级指针参数
void addFront(Node **head, int item)
{
    Node *temp = new Node();
    temp->data = item;
    temp->next = *head;
    *head = temp;
}

// main函数内的调用同步修改为传入头指针的地址
int main()
{
    addFront(&head, 1);
    addFront(&head, 2);
    addFront(&head, 3);
    traverse(head);
}

补充说明

建议全局头指针显式初始化Node *head = NULL;,避免不同编译器下的默认初始化异常。修复后代码运行会输出3 2 1,符合头插法的顺序逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:42:02