Dodawanie elementu w konkretnym miejcu do listy dwukierunkowej

0

Fragment kodu

class osoba{
public:
	int id;
	string imie;
	string nazwisko;
	osoba *poprzednia;
	osoba *nastepna;
	osoba();
};

osoba::osoba(){
	poprzednia = nastepna = NULL;
}

class lista{
public:
	osoba *pierwsza;
	osoba *ostatnia;
	lista();
	void DodajNaPoczatek(int id, string imie, string nazwisko);
	void DodajNaKoniec(int id, string imie, string nazwisko);
	void DodajPoId(int id, string imie, string nazwisko);
	void UsunKoniec();
	void WyswietlListeOdPoczatku();
	void WyswietlListeOdKonca();
};

lista::lista(){
	pierwsza = ostatnia = NULL;
}
(...)
void lista::DodajPoId(int id, string imie, string nazwisko){
	osoba *temp = pierwsza;
	osoba *tmp = pierwsza;
	while (temp){
		if (temp->id == id){	
			//wczytywanie danych
			tmp = new osoba;
			tmp->id = id+2;
			tmp->imie = imie;
			tmp->nazwisko = nazwisko;

			tmp->nastepna = temp->nastepna;
			tmp->poprzednia = temp;
			temp->nastepna->poprzednia = tmp;

			temp->nastepna = tmp;
		}
		temp = temp->nastepna;
	}
}
(...)
void main()
{
	lista *baza = new lista;
	
	baza->DodajNaPoczatek(1, "aaa", "AAA");
	baza->DodajNaKoniec(2, "bbb", "BBB");
	baza->DodajPoId(2, "ccc", "CCC");

	baza->WyswietlListeOdPoczatku();
	
	system("pause");
}

Gdy chcę dodać nowy element po id=2, to przy włączaniu progamu wyskakuje błąd.
Natomiast, gdy chcę nowy element umieścić po id=1 wszystko elegancko wychodzi.
Gdzie może być błąd?

0

A co się stanie jak przy dodawaniu trzeba będzie zmienić pierwszy element listy albo ostatni element?

0

Gdy chciałbym dodać element na pierwszym miejscu, to nic się nie dzieje, bo wtedy szuka id=0, którego nie ma.
Mam osobną metodę do dodawania elementu na początek.

0

No to odpal to pod debugerem i zobacz krok po kroku co sie dzieje. Nikt tego za ciebie nie zrobi.

3

temp->nastepna->poprzednia = tmp;
Jeżeli dodajemy po ostatnim to temp->nastepna jest NULL'em

0

Dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1