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