Nel mio modulo list.c/list.h ci sono due funzioni al caso tuo:
codice:
list append (list l1, list l2);
list reverse (list l);
list è un item*....
La append serve per creare una nuova lista avente l2 concatenata a l1; la reverse sfrutta l'append per ottenere una lista al contrario.
Come?
Puoi fare un qualcosa di ricorsivo (pseudocodice):
codice:
list reverse (list l)
{
se l è vuota: ritorna lista vuota;
altrimenti ritorna append di (reverse di l privata del primo elemento, primo elemento di l attaccato a una lista vuota);
}
Per fare tutto ciò ti conviene fare una funzione che ritorni una lista vuota e una funzione a cui passato un elemento e una lista ritorni la lista con in testa l'elemento (questa ti serve nell'ultima parte della reverse).
Magari prova a fare qualche tentativo, al massimo poi ti passo il codice