链表 - 覆盖数据
chained list - overwritten data
我用 C++ 编写了这个简单的链表。但是有一个奇怪的问题让
我很困惑。在我的程序中,用户应该能够输入任意数量的姓名和年龄,并且它们都应该相互链接。
但是,如果我输入 A 和 1、B 和 2、C 和 3,然后输入 D 和 4,则 C and 3
会被 D and 4
覆盖。有人可以解释为什么会这样吗?
代码:
#include<iostream>
#include<string>
using namespace std;
struct T_Schueler
{
string Name;
string Age;
T_Schueler *pnext;
};
T_Schueler *pStart = NULL;
int main()
{
string name, age;
while(true)
{
system("cls");
cout<<"Please enter name: ";
cin>> name;
cout<<"Please enter age: ";
cin>> age;
T_Schueler *pAllok, *pRun, *pLoesch;
pAllok = new(T_Schueler);
pAllok->pnext = NULL;
cout<<"\n\nNew dataset created.\n\n";
if(pStart == NULL)
{
pStart = pAllok;
pStart->Name = name;
pStart->Age = age;
}
else
{
pRun = pStart;
if (pRun->pnext != NULL)
{
pRun = pRun->pnext;
}
pRun->pnext = pAllok;
pRun = pRun->pnext;
pRun->Name = name;
pRun->Age = age;
}
//OUtput
pRun = pStart;
cout<<"Names: "<<endl;
while(pRun != NULL)
{
cout<< pRun->Name << " -> ";
pRun = pRun->pnext;
}
pRun = pStart;
cout<<"\nAges: "<<endl;
while(pRun != NULL)
{
cout<< pRun->Age << " -> ";
pRun = pRun->pnext;
}
cout<<endl;
system("PAUSE");
}
cin.get();cin.get();
return 0;
}
当你在寻找链表的尾部时
if (pRun->pnext != NULL)
{
pRun = pRun->pnext;
}
您想使用 while
而不是 if
来处理列表中已有多个节点的情况。
您在打印时已经这样做了,但在插入时却没有。
我用 C++ 编写了这个简单的链表。但是有一个奇怪的问题让
我很困惑。在我的程序中,用户应该能够输入任意数量的姓名和年龄,并且它们都应该相互链接。
但是,如果我输入 A 和 1、B 和 2、C 和 3,然后输入 D 和 4,则 C and 3
会被 D and 4
覆盖。有人可以解释为什么会这样吗?
代码:
#include<iostream>
#include<string>
using namespace std;
struct T_Schueler
{
string Name;
string Age;
T_Schueler *pnext;
};
T_Schueler *pStart = NULL;
int main()
{
string name, age;
while(true)
{
system("cls");
cout<<"Please enter name: ";
cin>> name;
cout<<"Please enter age: ";
cin>> age;
T_Schueler *pAllok, *pRun, *pLoesch;
pAllok = new(T_Schueler);
pAllok->pnext = NULL;
cout<<"\n\nNew dataset created.\n\n";
if(pStart == NULL)
{
pStart = pAllok;
pStart->Name = name;
pStart->Age = age;
}
else
{
pRun = pStart;
if (pRun->pnext != NULL)
{
pRun = pRun->pnext;
}
pRun->pnext = pAllok;
pRun = pRun->pnext;
pRun->Name = name;
pRun->Age = age;
}
//OUtput
pRun = pStart;
cout<<"Names: "<<endl;
while(pRun != NULL)
{
cout<< pRun->Name << " -> ";
pRun = pRun->pnext;
}
pRun = pStart;
cout<<"\nAges: "<<endl;
while(pRun != NULL)
{
cout<< pRun->Age << " -> ";
pRun = pRun->pnext;
}
cout<<endl;
system("PAUSE");
}
cin.get();cin.get();
return 0;
}
当你在寻找链表的尾部时
if (pRun->pnext != NULL)
{
pRun = pRun->pnext;
}
您想使用 while
而不是 if
来处理列表中已有多个节点的情况。
您在打印时已经这样做了,但在插入时却没有。