我尝试在链表的末尾插入一个节点。节点被插入但不管我给最后一个节点的值是什么,它总是最终给我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!
答案 0 :(得分:1)
这不是最后一个节点的值正在变为零,但是在创建函数中,您创建了一个您未考虑的额外节点,并且此节点采用默认值,即零。
所以你的列表实际上有这些值: 1 2 0 5
但由于显示功能出错,5还没有打印出来。
所以你的代码中有两个错误。
1- create function中的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++;
}
因为在你的代码中,最后一个元素没有被打印出来。
此致
答案 1 :(得分:0)
正如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;
}