Eu tenho trabalhado em um projeto Java para uma classe há algum tempo. É uma implementação de uma lista encadeada (aqui chamada AddressList
, contendo nós simples chamados ListNode
). O problema é que tudo teria que ser feito com algoritmos recursivos. Consegui fazer tudo bem sem um método:public AddressList reverse()
ListNode:
public class ListNode{
public String data;
public ListNode next;
}
No momento, minha reverse
função apenas chama uma função auxiliar que recebe um argumento para permitir a recursão.
public AddressList reverse(){
return new AddressList(this.reverse(this.head));
}
Com a minha função auxiliar tendo a assinatura de private ListNode reverse(ListNode current)
.
No momento, ele está funcionando iterativamente usando uma pilha, mas não é isso que a especificação exige. Eu tinha encontrado um algoritmo em C que o revertia recursivamente e o convertia manualmente em código Java, e funcionava, mas não o entendia.
Edit: Deixa pra lá, eu descobri entretanto.
private AddressList reverse(ListNode current, AddressList reversedList){
if(current == null)
return reversedList;
reversedList.addToFront(current.getData());
return this.reverse(current.getNext(), reversedList);
}
Enquanto estou aqui, alguém vê algum problema com esta rota?