Я написал этот простой цепочечный список в C ++. Но есть странная проблема, которая позволяет
меня это смутило. В моей программе пользователь должен иметь возможность вводить столько имен и возрастов, сколько ему нужно, и все они должны быть связаны друг с другом.
Но тем не менее, если я введу А и 1, В и 2, С и 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
обрабатывать случай нескольких узлов уже в списке.
Вы уже делаете это при печати, но не при вставке.
Других решений пока нет …