Witam! Mam pewien problem przy liście dwukierunkowej, którego nie mogę rozwiązać. Wszystko ładnie chodzi, ale jest jeden defekt przy dodawaniu na koniec listy. Bowiem, jak dodaje na końcu listy, to kasuje mi wtedy z listy wszystkie wcześniejsze elementy. Co dziwniejsze, jeśli dodam drugi raz na koniec listy, to wtedy już wszystko działa poprawnie i poprzedni element listy też się tam znajduje. Załączam fragment kodu. Struktury listy, elementu oraz metodę dodawania na końcu. Proszę o pomoc :)
struct student{
int numer_albumu;
string imie;
string nazwisko;
int rok_studiow;
string kierunek;
string specjalnosc;
student *nastepny; // wskaznik na nastepny element
student *poprzedni;
student(); // konstruktor
};
student::student(){
nastepny=0;
poprzedni=0; // konstruktor
}
struct lista{
student *pierwszy; // wskaznik na poczatek listy/pierwszy element
student *ostatni; // wskaznik na koniec listy/pierwszy element
int licznik;
void dodaj_studenta();
void usun_studenta();
void dodaj_studenta2();
int wyszukaj();
void dodaj_kilku_studentow();
void przejrzyj_liste();
void dodaj_studenta_po();
void wyswietl_liste()
{
student *temp=pierwszy;
while(temp)
{
cout << "numer albumu: " << temp->numer_albumu << " imie: " << temp->imie << "nazwisko: " << temp->nazwisko << "rok studiow: " << temp->rok_studiow << " kierunek: " << temp-> kierunek << "specjalnosc: " << temp-> specjalnosc << endl;
temp=temp-> nastepny;
}
}
lista();
};
lista::lista(){
pierwszy=0;
ostatni=0;
}
void lista::dodaj_studenta()
{
int numer_albumu, rok_studiow, kierunek, specjalnosc;
string imie, nazwisko;
student *nowy = new student;
cout << "Podaj numer albumu studenta: ";
cin >> nowy -> numer_albumu;
cout << endl << "Podaj imie studenta: ";
cin >> nowy -> imie;
cout << endl << "Podaj nazwisko studenta: ";
cin >> nowy -> nazwisko;
cout << endl << "Podaj rok studiow studenta: ";
cin >> nowy -> rok_studiow;
cout << endl << "Podaj kierunek studiow studenta: ";
cin >> nowy -> kierunek;
cout << endl << "Podaj specjalnosc studiow studenta: ";
cin >> nowy -> specjalnosc;
cout << endl;
if(pierwszy==NULL)
{
pierwszy = nowy;
}
else
{
student *temp=pierwszy;
nowy -> nastepny=NULL;
nowy -> poprzedni=ostatni;
ostatni=nowy;
if(nowy->poprzedni)
nowy->poprzedni->nastepny=nowy;
else
pierwszy=nowy;
}
}