Sto lavorando a un progetto Java per una classe da un po 'di tempo ormai. È un'implementazione di una lista collegata (qui chiamata AddressList
, contenente semplici nodi chiamati ListNode
). Il problema è che tutto dovrebbe essere fatto con algoritmi ricorsivi. Sono stato in grado di fare tutto bene senza un metodo:public AddressList reverse()
ListNode:
public class ListNode{
public String data;
public ListNode next;
}
In questo momento la mia reverse
funzione chiama solo una funzione di supporto che accetta un argomento per consentire la ricorsione.
public AddressList reverse(){
return new AddressList(this.reverse(this.head));
}
Con la mia funzione di aiuto con la firma di private ListNode reverse(ListNode current)
.
Al momento, funziona in modo iterativo usando uno stack, ma questo non è ciò che richiede la specifica. Avevo trovato un algoritmo in C che lo inverteva ricorsivamente e lo converte a mano in codice Java, e funzionava, ma non lo capivo.
Edit: Nevermind, l'ho capito nel frattempo.
private AddressList reverse(ListNode current, AddressList reversedList){
if(current == null)
return reversedList;
reversedList.addToFront(current.getData());
return this.reverse(current.getNext(), reversedList);
}
Mentre sono qui, qualcuno vede problemi con questo percorso?