Przeglądanie i kasowanie elementów listy jednokierunkowej.

0

Cześć,

Próbuję zrobić ćwiczenie z królikami znalezione na http://www.cplusplus.com/forum/articles/12974/ i mam problem z przeglądaniem listy królików. Gdzieś popełniam błąd w rozumowaniu i funkcja poniżej wywala program gdy ostatni albo pierwszy królik mają być usunięte:

//Funkcja przegląda listę królików i w zależności od potrzeby zwiększa wiek lub usuwa z listy.
void add_age(bunny* bunny_list)  
{
	bunny* previous = NULL;
	bunny* current_bunny=bunny_list;
	bunny* temp = NULL;
	while(current_bunny != NULL)
	{
		if(current_bunny->get_age() < 10)
		{
			current_bunny->grow_bunny();
			previous = current_bunny;
			current_bunny = current_bunny->next_bunny;
		}
		else if(previous == NULL)   //Jeśli trzeba usunąć pierwszy element.
		{
			temp = current_bunny->next_bunny;
			bunny_list = temp;
			delete current_bunny;
			current_bunny = temp;
			temp = NULL;
			bunny_count--;
		}
		else
		{
			previous->next_bunny = current_bunny->next_bunny;
			delete current_bunny;
			current_bunny = previous->next_bunny;
			bunny_count--;
		}
	}
}

Będę wdzięczny za wszelkie wskazówki i uwagi.
Pozdrawiam i życzę Wesołych Świąt!

0

uzywaj nullptr zamiast null

0

Dziwnie to wygląda, zrób najpierw funkcję która po prostu przejrzy listę królików bez żadnego cudowania z ifami, potem na tej podstawie dodaj funkcję która zmieni ich wiek, następnie funkcję która usunie króliki.

0

Dzięki za uwagi. Będę pamiętał o nullptr, opcje g++ -std=c++11 mam już ustawiąną w opcjach budowania. Rozdzielenie na dwie funkcje to też nie problem. Niemniej, dalej nie wiem jak poprawnie skonstruować funkcję usuwania elementu z listy jednokierunkowej, która poprawnie obsłuży wszystkie przypadki. Będę wdzięczny za linka z dobrymi, prostymi przykładami, tag newbie zobowiązuje;)
Pozdrawiam,

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