Я уже некоторое время работает над Java-проектом для класса. Это реализация связанного списка (здесь называется AddressList
, содержащий простые узлы, называемые ListNode
). Уловка состоит в том, что все должно быть сделано с помощью рекурсивных алгоритмов. Я смог сделать все, что угодно, без одного метода: public AddressList reverse()
ListNode:
public class ListNode{
public String data;
public ListNode next;
}
Сейчас моя функция reverse
просто вызывает вспомогательную функцию, которая принимает аргумент, чтобы разрешить рекурсию.
public AddressList reverse(){
return new AddressList(this.reverse(this.head));
}
С моей вспомогательной функцией, имеющей подпись private ListNode reverse(ListNode current)
.
На данный момент я работаю итеративно, используя стек, но это не то, что требует спецификация. Я нашел алгоритм в C, который рекурсивно обратил вспять и преобразовал его в Java-код вручную, и он работал, но я не знал об этом.
Edit: Nevermind, я понял это тем временем.
private AddressList reverse(ListNode current, AddressList reversedList){
if(current == null)
return reversedList;
reversedList.addToFront(current.getData());
return this.reverse(current.getNext(), reversedList);
}
Пока я здесь, кто-нибудь видит проблемы с этим маршрутом?