gpt4 book ai didi

c++ - 为什么 temp->next!=NULL 有效而 temp!=NULL 在 C++ 的链表中不起作用

转载 作者:行者123 更新时间:2023-11-28 05:32:45 28 4
gpt4 key购买 nike

为什么下面的代码不起作用?据我所知,当 temp 达到 NULL 时,(new)ing 它应该创建一个 temp 指向它的新节点。奇怪的是,将 while 条件更改为 temp->next!=NULL 效果很好。对此有何解释?

    #include<iostream>

using namespace std;


class node{
int data;
node *next;
public:
node(){}
node(int value):data(value),next(NULL){}
void addNode(node *head,int value){
node *temp=head;
while(temp!=NULL){
temp=temp->next;
}
temp=new node(value);
temp->next=NULL;
}
void display(node *head){
node *temp=head;
while(temp!=NULL){
cout << temp->data << endl;
temp=temp->next;
}
}
};


int main(int argc,char** argv){
node *head=new node(15);
head->addNode(head,50);
head->addNode(head,22);
head->display(head);
cin.ignore();
return 0;
}

最佳答案

你粘贴的代码有很多错误。如果你想像这里一样向链表末尾添加一些东西,你首先需要找到列表末尾(就像你尝试在你的代码中做的那样),但是你在开始时有极端情况,其中头部为 NULL。假设 head 不为 NULL。

首先我们找到列表中的最后一个节点

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

现在我们有了列表中的最后一个节点。我们分配一个新的并填充它

tmp->next = new node;
tmp = tmp->next;
tmp->x = data;
tmp->next = NULL;

为什么你的循环不会停止。可能是 head 没有初始化并且你在列表中有一个循环(只是你旅行的内存中的一个地方)

add with head 可以为null。

if(tmp != null){
while(tmp->next != NULL){
tmp = tmp->next
}
tmp->next = new node;
tmp = tmp->next;
} else {
head = tmp = new node;
}

关于c++ - 为什么 temp->next!=NULL 有效而 temp!=NULL 在 C++ 的链表中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39051631/

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