我一直在为一个类的 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);
}
当我在这里时,有人看到这条路线有什么问题吗?
原文由 sdellysse 发布,翻译遵循 CC BY-SA 4.0 许可协议
一个回复中有代码说明了这一点,但您可能会发现通过提出和回答小问题(这是 The Little Lisper 中的方法)自下而上开始更容易: