связанный список — перезаписанные данные

Я написал этот простой цепочечный список в 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;
}

0

Решение

Когда вы ищете конец связанного списка

if (pRun->pnext !=  NULL)
{
pRun        =   pRun->pnext;
}

Вы хотите использовать while вместо if обрабатывать случай нескольких узлов уже в списке.

Вы уже делаете это при печати, но не при вставке.

2

Другие решения

Других решений пока нет …