Prowadzacy * ZnajdzProwadzacegoRekurencyjnie (Prowadzacy * pGlowaProwadzacego, string nazwisko){
//jeśli istnieje
if (pGlowaProwadzacego)
{
//jeśli znaleźliśmy prowadzącego zwrócić wskaźnik
if (pGlowaProwadzacego->NazwiskoProwadzacego == nazwisko)
return pGlowaProwadzacego;
//jeśli nie znaleźlismy szukaj dalej
else
return ZnajdzProwadzacegoRekurencyjnie(pGlowaProwadzacego->pNastepnyProwadzacy, nazwisko);
}
//nie ma takiego prowadzacego
else
return nullptr;
}
void DodajProwadzacegoNaPoczatek (Prowadzacy *& pGlowaProwadzacego, Zajecia *& pGlowaListyZajec, string nazwisko){
//tylko jeden prowadzacy
pGlowaProwadzacego = new Prowadzacy {nazwisko, pGlowaProwadzacego, pGlowaListyZajec};
Chciałbym aby wypisał się tylko jeden prowadzący któremu przypiszemy listę podwieszaną a przy okazji wykorzystać poprzednią funkcję
Dereferencja wskaźnika nie pomaga bo funkcja Znajdź ma 2 argumenty a porównujemy ze stringiem, chyba że ktoś ma inny pomysł.
void DodajProwadzacegoNaPoczatek (Prowadzacy *& pGlowaProwadzacego, Zajecia *& pGlowaListyZajec, string nazwisko){
//tylko jeden prowadzacy
while(pGlowaProwadzacego->pNastepnyProwadzacy)
{
if(pGlowaProwadzacego->NazwiskoProwadzacego != nazwisko)
pGlowaProwadzacego = new Prowadzacy {nazwisko, pGlowaProwadzacego, pGlowaListyZajec};
}
}
A jeśli nie tak to czy takie rozwiązanie ma sens
Edit: poradziłem sobie inaczej ale nie ukrywam że wolałbym z funkcji skorzystać
void DodajProwadzacegoNaPoczatek (Prowadzacy *& pGlowaProwadzacego, Zajecia *& pGlowaListyZajec, string nazwisko){
//tylko jeden prowadzacy
while(true)
{
auto p = pGlowaProwadzacego;
//jesli znalezlismy takie naziwsko przejdz do kolejnego elementu listy
if(p->NazwiskoProwadzacego == nazwisko)
{
p = p->pNastepnyProwadzacy;
}
//dodaj prowadzacego na poczatek listy
else
{
pGlowaProwadzacego = new Prowadzacy {nazwisko, pGlowaProwadzacego, pGlowaListyZajec};
break;
}
}
}