我试图自己创建链表程序。该程序编译没有错误,但我没有得到正确的结果 我曾在GCC和TURBO C ++上尝试过它。
#include<iostream>
#include<cstdio>
using namespace std;
struct node
{
char *name;
node *link;
};
int main()
{
int n, i;
node *start = NULL, *newnode, *temp;
char nam[10];
cout<<"Enter number of people:";
cin>>n;
for(i=0;i<n;i++)
{
cout<<"Enter name:";
fflush(stdin);
gets(nam);
if(start==NULL)
newnode = start = new node;
else
newnode = newnode->link = new node;
newnode->link = NULL;
newnode->name = nam;
}
cout<<"\n\tNames:";
temp = start;
while(temp!=NULL)
{
cout<<"\n"<<temp->name;
temp = temp->link;
}
delete newnode;
delete start;
delete temp;
return 0;
}
输出结果为:
Output ScreenShot
Enter number of people:4
Enter name:qwerty
Enter name:uiop
Enter name:asdf
Enter name:zxcv
Names:
zxcv
zxcv
zxcv
zxcv
--------------------------------
Process exited after 15.85 seconds with return value 0
按任意键继续。 。
答案 0 :(得分:3)
因为你让所有节点指向同一个数组nam
。这就是为什么所有节点都与上次输入的名称相同的原因。您必须为每个节点的name
指针创建自己的内存(或在节点中将name
设置为自动数组),然后将nam
复制到节点name
。
更改
newnode->name = nam;
到
newnode->name = new char [strlen(nam) + 1];
strcpy(newnode->name, nam);
也不要忘记delete[]
分配内存并阅读帖子下的评论,不要使用gets
&amp; fflush
。
提示:
使用std::string
代替char数组。它更容易使用,更不容易出错。
struct node
{
std::string name;
node *link;
};
std::string nam;
std::cin >> nam;
node->name = std::move(nam);