Allora ... Come ti ho già detto, una volta finita la ricerca (cioè quando trovi il cognome o quando arrivi a fine lista) devi assegnare nuovamente a 'temp' l' indirizzo del primo nodo per fare in modo che una successiva ricerca riparti dal primo nodo. Comunque ho commesso un errore: E' vero che dichiarando 'temp' static elimini un problema ma ne crei un' altro ossia, la ricerca verrà fatta sempre nella prima lista che invoca il metodo 'ricerca()' e non credo che è quello che vuoi. Potresti risolvere aggiungendo un dato-membro alla classe lista che rappresenta il nodo corrente della ricerca (quindi ha lo stesso significato di 'temp')... Es:
codice:
class lista
{
private:
puntnodo l;
puntnodo currNode;
public:
// Metodi ...
}
quindi utilizzare currNode al posto di temp nel metodo ricerca() :
codice:
void lista::ricerca( const char* cogn )
{
if( currNode != NULL )
{
if( strcmp(currNode->cognome, cogn) == 0 )
{
cout << "Il numero dell\' utente " << cogn << " e\' "<< currNode->telefono << endl;
// Questa istruzione è fondamentale per fare in modo che una successiva ricerca
// riparta dal nodo iniziale
currNode = l;
}
else
{
currNode = currNode->punt;
ricerca( cogn );
}
}
else
// come sopra
currNode = l;
}
In più ho notato soltanto ora che manca il distruttore di lista (ricordati che ogni nodo viene allocato dinamicamente). Mi scuso se c' è qualche errore di sintassi ma al momento, non posso provare il codice ...