使用c++引用参数在链表中分配新节点

Allocating new node in Linked List using C++ reference parameters

本文关键字:新节点 节点 分配 引用 c++ 参数 链表 使用      更新时间:2023-10-16

此代码片段适用于在开始时创建新节点。

void push(node **head_ref,int n_data){
   node *new_node= new(node);
   new_node->data=n_data;
   new_node->next=(*head_ref);
   *head_ref=new_node;
}
int main(){
   node *head=NULL;
   push(&head,data);
   return 0;
}

这是无效的,但为什么?我想做的是创建一个引用参数,正如Herbert Schildt所提到的。

void push(node &(*head_ref),int n_data){
   node *new_node= new(node);
   new_node->data=n_data;
   new_node->next=head_ref;
   head_ref=new_node;
}
int main(){
   node *head=NULL;
   push(head,data);
   return 0;
}

声明node &(*head_ref)使head_ref成为指向引用的指针,而不是指向指针的引用,指针是node*& head_ref

空指针不能是引用!因此,在c++中,唯一的方法就是使用双指针。

使用对空指针的引用可能导致未定义的行为,这意味着您应该避免这种情况。

也许boost::optional是你需要的,但是你需要做一些修改。

但是为什么不直接使用std::列表呢?