在链表末尾插入节点后出现意外值

Unexpected value after inserting node at the end of linked list

我试图在链表的末尾插入一个节点。节点被插入,但无论我给最后一个节点什么值,它最终总是给我 0(零)作为它的值。我的 C++ 代码是 -

#include<iostream>
using namespace std;

struct list{
    int data;
    list *next;
};

list * create(){
    char a;
    int i=1;
    list *move,*start,*temp;
    start=new list();
    temp=start;
    cout<<"Do u want to enter a new node. Press y but anything.\n";
    cin>>a;
    while(a=='y'){
        cout<<"Enter data for node "<<i<<endl;
        cin>>start->data;
       move=new list();
       start->next=move;
       start=start->next;
       i++;
       cout<<"Do u want to enter a new node. Press y but anything.\n";
       cin>>a;
    }
    start->next=NULL;
    return temp;
}

void display(list *ob){
    int i=1;
    while(ob->next!=NULL){
    cout<<"\nData for node "<<i<<" is :"<<ob->data;
    ob=ob->next;
    i++;
} }

void add(list *temp){
while(temp->next!=NULL){
    temp=temp->next;
}
int data;
list *node1=new list();
temp->next=node1;
cout<<"Enter data for new node at the end";
cin>>data;
node1->data=data;
node1->next=NULL;

}

int main(){

list *point=create();
add(point);
display(point);
}

我的控制台给出了以下输出。

Do u want to enter a new node. Press y but anything.
y
Enter data for node 1
1
Do u want to enter a new node. Press y but anything.
y
Enter data for node 2
2
Do u want to enter a new node. Press y but anything.
n
Enter data for new node at the end 5

Data for node 1 is :1
Data for node 2 is :2
Data for node 3 is :0

任何人都可以向我解释节点 3 的输出。尽管给它赋值 5,但它给出 0 作为它的输出!!!

不是最后一个节点的值变为零,而是在您的创建函数中,您正在创建一个您没有考虑的附加节点,并且该节点采用默认值,即零。

所以你的列表实际上有这些值: 1 2 0 5

但是 5 也没有打印出来,因为你的显示函数有错误。

所以你的代码有两个错误。

1- create 函数中的 while 循环应该变成这样:

while(a == 'y'){
    cout<<"Enter data for node "<<i<<endl;
    cin>>start->data;
    cout<<"Do u want to enter a new node. Press y but anything.\n";
    cin>>a;

    if (a != 'y')
    {
        break;
    }

    move=new list();
    start->next=move;
    start=start->next;
    i++;
}

我知道它看起来不太整洁,所以如果您愿意,可以翻转代码中的某些内容,使其看起来更整洁,但可以完成这段代码的作用(自己尝试 ;))

2-显示函数应该变成:

while(ob!=NULL){
    cout<<"\nData for node "<<i<<" is :"<<ob->data;
    ob=ob->next;
    i++;
}

因为在您的代码中,没有打印最后一个元素。

此致,

正如 AbdulRahman AlHamali 指出的那样,我说原始列表将被销毁是错误的。所以,我的建议现在变得无关紧要了。

// 不相关

建议:在移动到下一个节点之前设置一个变量来保存列表的引用:

void add(list *temp){
    list *temp1 = temp;
    while(temp1->next!=NULL){
        temp1=temp->next; 
    }
    int data;
    list *node1=new list();
    temp1->next=node1;
    cout<<"Enter data for new node at the end";
    cin>>data;
    node1->data=data;
    node1->next=NULL;

    }