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:
quindi utilizzare currNode al posto di temp nel metodo ricerca() :codice:class lista { private: puntnodo l; puntnodo currNode; public: // Metodi ... }
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 ...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; }

Rispondi quotando