不能从我的添加功能之外的链表的头部cout数据

时间:2013-06-04 09:20:07

标签: c++ linked-list

所以我一直在教自己链接列表,并一直在努力为他们编写一些非常基本的功能。基本上我一直在使用

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;

但如果我进入我的addToList函数并执行

cout<<headOfList->data; 

它完美无缺。为什么会这样?

2 个答案:

答案 0 :(得分:1)

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){
                                                 ^

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

答案 1 :(得分:0)

当您将headList参数传递给addToList时,您实际上正在传递副本headOfListhead是独立的指针。这意味着当您修改函数内部的头指针以指向其他任何内容并返回时,head指针仍未修改(指向NULL)。执行cout<<head->data;时,您将取消引用NULL指针。 (head->data等于(*head).data。)

在这种情况下,解决方案是添加另一个间接级别,即将指针传递给指向ListNode的指针,正如Shafik所解释的那样:

addToList(someRandomNumber, &head);