Lista jednokierunkowa - usuwanie osób po nazwiskach

0
void lista::usun_osobe_nazwisko(string nazwisko)
{
	osoba* temp = pierwsza;
	bool czy_usunieto_osobe = false;

	while (temp != NULL)
	{
		czy_usunieto_osobe = false;

		if (temp->nazwisko == nazwisko)
		{
			if (temp == pierwsza)
			{
				pierwsza = temp->nastepna;
			}

			else
			{
				osoba* usuwana = temp;
				temp = temp->nastepna;
				delete usuwana;
				czy_usunieto_osobe = true;
			}
		}

		if (!czy_usunieto_osobe)
		{
			temp = temp->nastepna;
		}
	}
}

Witam, mam do napisania voida, w którym usuwanę bedą wszystkie osoby o nazwisku podanym przez użytkownika. To, co na razie mam usuwa wszystkich poprawnie tylko wtedy, gdy wszystkie osoby na liscie mają wprowadzone przez użytkownika nazwiska. Jakies porady? Nie mam pojęcia za co się zabrać

0

Pisane z palca, więc są literówki itp:

template<typename F>
void lista::remove_if(F&& f)
{
    auto temp = &pierwsza;
    while (*temp) {
         while (*temp && f(**tmp)) {
               auto toRemove = *temp;
               *temp = (*temp)->nastepna;
               skasujElement(*temp);
         }
         if (*temp) temp = &(*temp)->nastepna;
    }
}

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