PDA

View Full Version : Strutture dinamiche in C!!!


SimoneDAndreta
06-12-2002, 11:09
Ciao, ho un esercizio da consegnare x lunedě ed č questo:
Data una lista concatenata in C, scrivere una f.ne che esegua il rovesciamento della lista. Ad es. x la lista 3>6>8>1 la f.ne modifica la lista in modo da ottenere 1>8>6>3... come si fa???
Grazie x l'aiuto!!! Ciao

bsummer
09-12-2002, 10:07
Magari dico una stupidata, ma... non era piu' semplice partire con due cursori, uno dal primo nodo e uno dall'ultimo, e fare uno scambio del contenuto dei nodi stessi ? ;)

cionci
09-12-2002, 10:09
Chiaro...comunque dipende dalla soluzione richiesta... Solitamente questi esercizi richiedono di non effettuare operazioni sui nodi...

bsummer
09-12-2002, 10:21
Ok allora io farei cosi':

Supponendo di avere una funzione che inserice un nodo in testa (molto semplice da fare), scorro tutta la lista originale aggiungendo via via i nodi visitati in testa ad una seconda lista inizialmente vuota.
I nodi gia' visitati delle prima lista si possono deallocare. Alla fine si restituisce il puntatore alla nuova lista creata.

Non e' effettivamente rovesciare come un calzino la lista originale, ma il risultato e' lo stesso :D

Bye

/\/\@®˘Ř
10-12-2002, 15:53
Originariamente inviato da bsummer
[B]Magari dico una stupidata, ma... non era piu' semplice partire con due cursori, uno dal primo nodo e uno dall'ultimo, e fare uno scambio del contenuto dei nodi stessi ? ;)
La soluzione č ottima se la lista contiene puntatori in entrambi i sensi. In una lista "semplice" (puntatori in un solo senso) la cosa non č fattibile (non cosi' semplicemente perlomeno).
Se convenga o meno modificare i valori direttamente dipende dall'uso che fai della lista: i valori potrebbero essere piu' grandi di semplici interi (e cosi' ti converrebbe cambiare i puntatori) oppure potresti voler tenerti puntatori alla lista (pratica poco 'pulita' comunque) ; in tal caso cambiando i puntatori next non ti cambia il contenuto "sotto il naso".
Insomma, si puo' fare in mille modi differenti :D.
(i due post precedenti ? spariti ? :confused: )