在链表末尾插入节点后出现意外值
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;
}
我试图在链表的末尾插入一个节点。节点被插入,但无论我给最后一个节点什么值,它最终总是给我 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;
}