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;
coutheadOfLst
是通过值传递的,因此当您修改变量时,它不会反映在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);