Hogyan írjak olyan függvényt ami a láncolt lista utolsó előtti elemének címét vissza adja?
Tehát nem az utolsót aminek itsNext adattagja egy 0 ra mutat.Hanem az utolsó előttiét.
Mert amikor a lista végére akarok csatolni még egy objektumot akkor ugye meg kell szerezni az utolsó elemre mutató pointert.
Ezt adná vissza a függvény.
Meg olyat is akarok majd írni,hogy át adom a függvénynek bemenő paraméterként egy char vagy string típust,hogy annak az objektumnak a címét adja vissza aminek az itsName adattagjába a bemenő paraméterrel megegyező szöveg van.
Így a közepére is könnyebben be fogok tudni tenni a karakterláncba.
Próbálkozom közben.
Kérlek ne írjátok le a kódot azt én akarom csak segítsetek.
Nem teljesen értem a gondodat, de ha az utolsó előtti elemet akarod visszaadni, akkor if ( act->itsNext->itsNext == NULL ), X->Y->NULL -ből X-et adja vissza.
Ha pedig egy cím kell, akkor egy Node& visszatérési értékkel rendelkező fgv-t írsz, ami addig tologatja az act-ot. ( Az act-ot beállítod a fejelemre, és itsNext-elgetsz, addig amíg act->itsName != akármi ), majd ezt return-ölöd.
Előző a te válaszodból semmit sem értek.
Itt a kód az utolsó helyre akarom be tenni az új elemet.
//main.cpp
# include <iostream>
# include <cstring>
typedef unsigned short ushort;
typedef unsigned int uint;
using namespace std;
class Cat {
public:
Cat(string name);
~Cat();
string Get_Name()const {return *itsName;}
void Set_Next(Cat *const elem) {itsNext = elem;}
Cat* Get_Next()const {return itsNext;}
protected:
private:
string *itsName;
Cat *itsNext;
};
Cat::Cat(string name):
itsName(new string(name))
{}
Cat::~Cat() {
delete itsName;
}
Cat* Get_NameTheLastElement(Cat *const elem);
int main() {
Cat *lista_fej = 0;
Cat *uj = new Cat("Bolyhos");
lista_fej = uj;
uj->Set_Next(0); //lista_fej---->Bolyhos,0
uj = new Cat("Tappancs");
uj->Set_Next(lista_fej);
lista_fej = uj; //lista_fej----->Tappancs,*---->Bolyhos,0
uj = new Cat("Mancsos");
uj->Set_Next(lista_fej);
lista_fej = uj; //lista_fej----->Mancsos,*------>Tappancs,*----->Bolyhos,0
uj = new Cat("Szormi");
uj->Set_Next(0);
Cat *regi = Get_NameTheLastElement(lista_fej);
regi = uj;
for(Cat *elem = lista_fej; elem != 0; elem = elem->Get_Next())
cout <<"Macsek a listaban: "<< elem->Get_Name() << endl;
return 0;
}
Cat* Get_NameTheLastElement(Cat *elem) {
for(;elem != 0; elem = elem->Get_Next());
return(elem->Get_Next());
}
Mindjárt gondoltam, hogy te vagy a láncolt listás is. Komolyan, tényleg, őszintén: hagyd abba a programozást. Egész egyszerűen nem megy, teljesen alap fogalmakkal nem vagy tisztában, és ha leírjuk neked abszolút érthetően, te elkezdesz hisztizni, hogy de nem értem és brühühü és hülyék vagytok.
while(elem != 0)
elem = elem->Get_Next();
return(elem->Get_Next());
Addig is itt egy találóskérdés: ha a while ciklus addig fut, amíg a feltétele hamissá nem válik, és az elem != 0 kifejezés pontosan akkor hamis, ha az elem == 0, akkor vajon jó ötlet-e ezután erre az elem változóra tagfüggvényt hívni?
"Nem teljesen értem a gondodat, de ha az utolsó előtti elemet akarod visszaadni, akkor if ( act->itsNext->itsNext == NULL ), X->Y->NULL -ből X-et adja vissza."
Itt megkaptad a választ. Ezt fogalmazd át a te példádra. Lesznek speciális esetek (ez a 0 és 1 elemű lista, amikor nincs utolsó előtti).
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!