Я уже некоторое время работаю над проектом 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);
}
Пока я здесь, кто-нибудь видит проблемы с этим маршрутом?