相关疑难解决方法(0)

以递归方式反转Java中的链表

我一直在为一个类的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)

虽然我在这里,有没有人看到这条路线有任何问题?

java recursion linked-list data-structures

97
推荐指数
8
解决办法
18万
查看次数

在没有"反向"或复制数组的情况下反转数组

我正在尝试解决以下练习:

不使用反向方法反转数组,不使用第二个数组,也不重复任何值.

我已经考虑过将数组作为一个对象,然后从最后到开始更新数组,但我想你也可以更新它.

尝试过简单的事情:

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)

但这并没有真正改变它.有关如何做到这一点的任何建议或解释?

javascript arrays algorithm array-algorithms

3
推荐指数
1
解决办法
2769
查看次数