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

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

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

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;
}

空指针不能作为引用! 所以在 C++ 中只有一种方法,即使用双指针。

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

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

但是你为什么不直接使用 std::list?

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