Od jakiegoś czasu pracuję nad projektem Java dla klasy. Jest to implementacja połączonej listy (nazywanej tutaj AddressList, zawierającej zwane proste węzły ListNode). Haczyk polega na tym, że wszystko musiałoby być zrobione za pomocą algorytmów rekurencyjnych. Udało mi się zrobić wszystko dobrze bez jednej metody:public AddressList reverse()
ListNode:
public class ListNode{
public String data;
public ListNode next;
}
W tej chwili moja reversefunkcja po prostu wywołuje funkcję pomocniczą, która przyjmuje argument, aby zezwolić na rekursję.
public AddressList reverse(){
return new AddressList(this.reverse(this.head));
}
Dzięki mojej funkcji pomocniczej posiadającej podpis private ListNode reverse(ListNode current).
W tej chwili pracuję iteracyjnie ze stosem, ale nie tego wymaga specyfikacja. Znalazłem algorytm w C, który rekurencyjnie odwracał go i ręcznie konwertował na kod Java, i działał, ale nie rozumiałem tego.
Edycja: nieważne, w międzyczasie odkryłem to.
private AddressList reverse(ListNode current, AddressList reversedList){
if(current == null)
return reversedList;
reversedList.addToFront(current.getData());
return this.reverse(current.getNext(), reversedList);
}
Skoro tu jestem, czy ktoś widzi jakieś problemy z tą trasą?