Я вже деякий час працюю над проектом Java для класу. Це реалізація пов'язаного списку (тут називається AddressList
, містить прості вузли, що називаються ListNode
). Проблема полягає в тому, що все потрібно було б робити за допомогою рекурсивних алгоритмів. Мені вдалося зробити все добре одним методом:public AddressList reverse()
Вузол списку:
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);
}
Поки я тут, хтось бачить якісь проблеми з цим маршрутом?