gpt4 book ai didi

c++ - 为什么我不能在 head 之后插入节点到 C++ 链表中?

转载 作者:太空宇宙 更新时间:2023-11-04 14:41:01 25 4
gpt4 key购买 nike

谁能帮我找出下面代码中的问题。

#include <iostream>

using namespace std;

struct node
{
int a,b;
struct node* next=NULL;
};

node* head=NULL;

void insert(int a,int b)
{
if(head==NULL)
{
head=new node;
head->a=a;
head->b=b;
return;
}
node* cur=head;
while(cur!=NULL)
{
cur=cur->next;
}
cur=new node;
cur->a=a;
cur->b=b;
return;
}

void display()
{
node* cur=head;
while(cur!=NULL)
{
cout<<cur->a<<"\t"<<cur->b<<"\n";
cur=cur->next;
}

}

int main()
{
int i;
for(i=0;i<3;++i)
{
insert(i,i+1);
}
display();
//cout<<h->next->a;
return 0;
}

这是我得到的输出:

        0        1

我好像只能显示头节点,插入后没有。如果我尝试访问 head 之后的下一个节点,则会出现段错误。这是为什么?

最佳答案

您的搜索代码是:

node* cur=head;
while(cur!=NULL)
{
cur=cur->next;
}
cur=new node;

在循环结束时,您找到了添加新节点的正确位置,但是您用 cur = new node; 覆盖了它——所以您需要使用更像这样的东西:

node *new_node = new node;
new_node->a = a;
new_node->b = b;
new_node->next = nullptr;
cur->next = new_node;

或者,等价地:

cur->next = new node;
cur->next->a = a;
cur->next->b = b;
cur->next->next = nullptr;

更好的是,您可以为 struct node 类创建一个构造函数,例如:

node(int a_init = 0, int b_init = 0) : a(a_init), b(b_init), next(nullptr) { }

然后:

cur->next = new node(a, b);

会完成整个初始化工作。

关于c++ - 为什么我不能在 head 之后插入节点到 C++ 链表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38938987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com