因此,我一直在自学链表,并尝试为它们编写一些非常基本的函数。基本上我一直在做的就是
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;在我的main函数中。我遇到的问题是在我做完我的
addToList(someRandomNumber,head);如果我这样做,我会得到一个错误,
cout<<head->data;但是如果我进入我的addToList函数并执行
cout<<headOfList->data; 它工作得非常好。为何会这样呢?
发布于 2013-06-04 17:37:23
当您将headList参数传递给addToList时,实际上是在传递该参数的副本。headOfList和head是独立的指针。这意味着,当您修改函数内的头指针以指向其他任何内容并返回时,head指针仍然是未修改的(指向NULL)。执行cout<<head->data;时,将取消对空指针的引用。(head->data等于(*head).data。)
这种情况下的解决方案是添加另一个间接级别,即传递一个指向ListNode的指针的指针,正如Shafik所解释的那样:
addToList(someRandomNumber, &head);https://stackoverflow.com/questions/16914081
复制相似问题