Я уже некоторое время работаю над 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 вручную, и он работал, но я этого не понимал.
Изменить: Неважно, тем временем я понял это.
private AddressList reverse(ListNode current, AddressList reversedList){
if(current == null)
return reversedList;
reversedList.addToFront(current.getData());
return this.reverse(current.getNext(), reversedList);
}
Пока я здесь, кто-нибудь видит проблемы с этим маршрутом?