我一直在为一个类的Java项目工作.它是链表的实现(此处称为AddressList包含调用的简单节点ListNode).问题在于,所有事情都必须通过递归算法来完成.我能做的一切都很好,没有一种方法:public AddressList reverse()
ListNode:
public class ListNode{
public String data;
public ListNode next;
}
Run Code Online (Sandbox Code Playgroud)
现在我的reverse函数只调用一个辅助函数,该函数接受一个允许递归的参数.
public AddressList reverse(){
return new AddressList(this.reverse(this.head));
}
Run Code Online (Sandbox Code Playgroud)
我的助手功能有签名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);
}
Run Code Online (Sandbox Code Playgroud)
虽然我在这里,有没有人看到这条路线有任何问题?
我正在尝试解决以下练习:
不使用反向方法反转数组,不使用第二个数组,也不重复任何值.
我已经考虑过将数组作为一个对象,然后从最后到开始更新数组,但我想你也可以更新它.
尝试过简单的事情:
function reverseArray(array) {
for (var i = 0; i < array.length; i++) {
// var elem = array.shift();
var elem = array.shift()
array.push(elem)
}
return array
}
array = ['a', 'b','c','d','e'];
reverseArray(array);Run Code Online (Sandbox Code Playgroud)
但这并没有真正改变它.有关如何做到这一点的任何建议或解释?