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

链表push函数中node** head_ref双指针作用及插入元素失败原因问询

1. node** head_ref的作用

C/C++的函数参数默认采用值传递,如果你直接传一级指针node* head到函数中,函数内部修改的只是这个指针的副本,不会对函数外部的原头指针生效。
传入二级指针node** head_ref本质是传入了「指向原头指针的指针」,对*head_ref解引用后得到的就是函数外部的原头指针本身,修改该值可以直接更新外部的头节点地址,完成头插操作后能让外部拿到最新的头节点。

2. 链表插入失败的原因

你遇到的问题和Node大小写没有本质关联,核心问题和可能的关联问题如下:

  • 代码存在致命逻辑错误:你代码的最后一行写的是(*head_ref)=new node;,相当于把已经设置好data和next的新节点new_node直接丢弃,给头指针赋值了一个完全未初始化的全新空节点,之前的赋值操作全部失效,自然无法插入元素,链表始终为空。
  • 大小写修改带来的编译问题:如果原代码的节点结构体/类定义的名称就是大写Node,你只修改了函数内的类型为小写node,但没有同步修改结构体定义或者添加typedef Node node;的声明,会导致编译器无法识别node类型,编译失败无法运行。

修正后的正确代码

void push(node** head_ref, int new_data){
    node* new_node = new node;
    new_node->data = new_data;
    new_node->next = (*head_ref);
    (*head_ref) = new_node; // 此处赋值为已经初始化好的new_node即可
}

如果你不想用二级指针,也可以用指针引用实现相同效果,语法更简单:

void push(node*& head_ref, int new_data){
    node* new_node = new node;
    new_node->data = new_data;
    new_node->next = head_ref;
    head_ref = new_node;
}

内容的提问来源于stack exchange,提问作者devacius the one above all

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 08:06:03