在下面的代码中,仅显示最后一个元素内存储的数字,而不显示其余元素。
#include <stdio.h>
#include <iostream>
using namespace std;
struct node
{
int data;
node* next;
};
struct node * Start = NULL;
struct node * End = NULL;
void CreateList(int num)
{
struct node *temp = new struct node;
int data,i=0;
while(true)
{
cout<<"Enter data \n";
cin>>data;
temp->data = data;
temp->next = Start;
if(Start==NULL)
{
Start = End = temp;
}
else{
End->next = temp;
End = temp;
}
if(i==num-1)
break;
i++;
}
}
void Display()
{
struct node* temp1;
temp1 = Start;
do{
cout<<temp1->data<<endl;
temp1=temp1->next;
} while(temp1!=Start);
}
int main()
{
int num;
cout<<"How many elements you want to input?\n";
cin>>num;
CreateList(num);
Display();
return 0;
}
我使用结构而不是类来完成它。我使用了两个非动态指针“开始”和“结束”。主要问题来自Display()
函数。 Display()
正在打印最后一个元素的值。
输出:
答案 0 :(得分:1)
您没有在CreateList
中创建所需数量的节点。您正在使用
struct node *temp = new struct node;
并在循环中重用同一节点。
这是该功能的更新版本。
void CreateList(int num)
{
int data,i=0;
while(true)
{
cout<<"Enter data \n";
cin>>data;
// Create a new node for every data
struct node *temp = new struct node;
temp->data = data;
temp->next = Start;
if(Start==NULL)
{
Start = End = temp;
}
else{
End->next = temp;
End = temp;
}
if(i==num-1)
break;
i++;
}
}
进一步清理的建议。在C ++中,您不需要使用struct node
。只需node
就足够了。
node* Start = NULL;
node* End = NULL;
和
// Create a new node for every data
node *temp = new node;