Se devi invertire una lista, la prima cosa che salta all'occhio è che dovrai modificare solamente i 'next' dei nodi in modo che un nodo non punti più al successivo ma al precedente.
La questione della ricorsione complica solo di poco le cose, per lo meno concettualmente. Se lo si fa bene e in modo logico, bastano poche righe di codice.
Una soluzione è fare un metodo ricorsivo che ha come parametro 2 nodi: quello "attuale" e quello "precedente". Il metodo dovrà fare in modo che il nodo punti al precedente (e questo è facile) ma dovrà anche fare la ricorsione.
La parte più importante è che una volta invertita la lista, il nuovo "head" sarà l'ultimo nodo della lista iniziale. Questo vuol dire che la ricorsione deve proseguire in avanti e arrivato all'ultimo nodo deve iniziare il processo inverso, cioè ritornare indietro facendo ritornare come valore sempre quell'ultimo nodo.