Grazie per la risposta ma mi sa che senza codice non riesco a spiegarmi![]()
La versione ricorsiva mi è venuta (ed è più facile):
Il fatto è che la versione ricorsiva comincia a risolvere le istanze della funzione madre che le ha create dall'ultima (quindi dalla fine della coda fino alla testa) cosa non valida per la versione iterativa in cui devo cominciare a fare le modifiche dalla testa.codice:void invertiListaricorsiva (struct cella **t) //inversione della lista ricorsiva { struct cella *paux; if ((*t)->next !=NULL) { paux = *t; *t = (*t)->next; invertiListaricorsiva(t); paux->next->next = paux; paux->next = NULL; } }
Ho pensato di introdurre due puntatori ausiliari:
- paux1 sostituisce ciò che è puntato dalla testa
- paux1->next = testa
- paux1->next->next = paux2
In modo da avere uno schema del tipo:
testa->struct1.next->struct2.next->struct3.next->NULL
Da qui in poi ho perso ore pensando a come ribaltare questa lista:master:
P.S. Non voglio mantenere una lista doppiamente linkata in cui ogni struct ha un puntatore alla struct precedente ed a quella successiva vorrei cavarmela con un solo puntatore a next per ogni casella...