PDA

Visualizza la versione completa : [C++] Trova massimo in una lista


djanthony93
28-01-2013, 15:44
Ho una lista creata in questo modo:



typedef char stringa[N];
typedef struct nodo * pNodo;
struct nodo
{
stringa name;
int age;
pNodo next;
};


devo cercare e stampare il nome della persona più anziana, la funzione che ho fatto per trovare il massimo è questa:



pNodo trovaMassimo(pNodo l)
{
pNodo p = l->next;
while(p != 0){
if(l->age < p->age) l->age = p->age;
p = p->next;
}
return l;
}


ora quando vado a stampare nel main l->age mi dà l'età più grande, però se stampo l->name mi stampa sempre il primo nome che inserisco in lista, perchè?

Alex'87
28-01-2013, 16:09
Originariamente inviato da djanthony93


pNodo trovaMassimo(pNodo l)
{
pNodo p = l->next;
while(p != 0){
if(l->age < p->age) l->age = p->age;
p = p->next;
}
return l;
}


ora quando vado a stampare nel main l->age mi dà l'età più grande, però se stampo l->name mi stampa sempre il primo nome che inserisco in lista, perchè?

Beh, stai aggiornando solo l->age.. cosa ti aspetti?

Comunque perché controlli l'età di ciascuno con quella del primo elemento? Dovresti tenerti da una parte il puntatore all'elemento maggiore fino a quel momento...

Scara95
28-01-2013, 16:09
pNode max(pNode l) {
pNode ret = l;
while(l!=NULL) {
l = l->next;
if(l->age > ret->age)
ret = l;
}
return ret;
}

djanthony93
28-01-2013, 16:49
pNodo trovaMassimo(pNodo l)
{
pNodo p = l->next;
while(p != 0){
if(l->age < p->age) l = p;
p = p->next;
}
return l;
}




così funziona?

Loading