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 reverse
funkcja 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ą?