C++ can';在我的add函数之外,无法从链表的头部获取数据

C++ can';在我的add函数之外,无法从链表的头部获取数据,c++,linked-list,C++,Linked List,所以我一直在自学链表,一直在胡闹,试图为它们编写一些非常基本的函数。基本上就是我一直在做的 struct ListNode{ int data; ListNode *next }; 我正在尝试创建一个函数,将数字添加到列表中,到目前为止,我得到的是 void addToList(int numberToAdd, struct ListNode *headOfList){ ListNode *newItem=new ListNode; newItem->data=numberToAdd;

所以我一直在自学链表,一直在胡闹,试图为它们编写一些非常基本的函数。基本上就是我一直在做的

struct ListNode{
int data;
ListNode *next
};
我正在尝试创建一个函数,将数字添加到列表中,到目前为止,我得到的是

void addToList(int numberToAdd, struct ListNode *headOfList){
ListNode *newItem=new ListNode;
newItem->data=numberToAdd;
if(headOfList==NULL){
    newItem->next=NULL;
    headOfList=newItem;
}}
到目前为止,我只尝试将单个ListNode添加到声明为

ListNode *head=NULL;
在我的主要职能中。我遇到的问题是,在我做了

addToList(someRandomNumber,head);
如果我这样做,我会出错

cout<<head->data;

cout
headOfLst
是通过值传递的,因此当您修改变量时,它不会反映在
main
中:

void addToList(int numberToAdd, struct ListNode *headOfList){
                                                ^^^^^^^^^^^^
如果传递的是双指针,则可以修改指针本身:

void addToList(int numberToAdd, struct ListNode **headOfList){
随后的任务是:

*headOfList=newItem;
编辑

调用
main
时,应进行如下修改:

addtolist(1,&head);
另一个选项是将引用传递给指针:

void addToList(int numberToAdd, struct ListNode *& headOfList){
                                                 ^

在这种情况下,不需要修改任何其他代码。

当您将
headList
参数传递给
addToList
时,实际上是在传递它的副本
headOfList
head
是独立的指针。这意味着,当您在函数中修改头指针以指向任何其他对象并返回时,
指针仍然未修改(指向NULL)。执行
时,coutdata
等于
(*head).data

本例中的解决方案是添加另一个间接级别,即传递指向
列表节点的指针的指针,正如Shafik所解释的:

addToList(someRandomNumber, &head);

headOfList=newItem仅修改本地指针,因此引用丢失。您需要修改指向head的指针的值。错误为访问冲突readingOk so。。我这样做了,现在我不知道如何修改我的主要功能,我有一些像addtolist(1,head);它说它无法将ListNode*转换为ListNode**(我在这方面很新:**()我的无知可能会让你想cry@MichaelKiminChoo,
addtolist(1,&head);
@MichaelKiminChoo很抱歉,我在意识到我遗漏了那部分之前就离开了家。我更新了我的帖子并添加了一个替代解决方案。谢谢。我也忘了接受你的回答,现在你还在免费教育我,所以不必道歉:)
addToList(someRandomNumber, &head);