Grazie per la risposta ma mi sa che senza codice non riesco a spiegarmi

La versione ricorsiva mi è venuta (ed è più facile):

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;

	}


}
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.
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...