【发布时间】:2010-09-26 04:11:10
【问题描述】:
我一直在为一个类从事 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);
}
当我在这里时,有人发现这条路线有什么问题吗?
【问题讨论】:
-
不,您的解决方案没有问题。相反,它甚至比受欢迎的“Little Lisper”解决方案“更好”,因为它让原始列表保持不变。这在多核环境中尤其有价值,在这种环境中,不可变值是非常受欢迎的。
标签: java data-structures recursion linked-list