目的是编写代码以借助递归来反转列表的元素。
public static List<Integer> reverse(List<Integer> input) {
if (input.isEmpty()) {
return new LinkedList<Integer>();
} else {
List<Integer> output = new LinkedList<Integer>();
output.add(((LinkedList<Integer>) input).removeLast());
reverse(input);
return output;
}
}
不幸的是,我只正确地获得了第一个元素,列表的其余部分却没有出现。我想念什么?
答案 0 :(得分:1)
在评论中如何提及它,您需要第二个参数,并且可能不需要返回值:
public static void reverse(List<Integer> input, List<Integer> output) {
if (input.isEmpty()) {
return;
}
output.add(((LinkedList<Integer>) input).removeLast());
reverse(input, output);
}
用法:
List<Integer> input = new LinkedList<>();
// fill it with values
List<Integer> output = new LinkedList<>();
reverse(input, output);
System.out.println(output);
答案 1 :(得分:1)
您可以像下面的代码中那样进行操作。请注意,我正在使用recv(1024)
方法。
removeFirst()
答案 2 :(得分:0)
为了方便使用,我将Stack作为其pop方法。
public static List<Integer> reverse(List<Integer> input) {
Stack<Integer> stack = new Stack();
stack.addAll(input);
return reverse(stack,new LinkedList<>());
}
public static List<Integer> reverse(Stack<Integer> input,LinkedList<Integer> output) {
if (input.isEmpty()) {
return output;
}
output.addFirst(input.pop());
reverse(input, output);
return output;
}
如果要跳过元素的重新添加,则需要维护索引,或使用知道第一个和最后一个元素的LinkedList。 这里是维护索引和纯List API:
public static List<Integer> reverse(List<Integer> input) {
return reverse(input,new LinkedList<>(),0);
}
public static List<Integer> reverse(List<Integer> input,LinkedList<Integer> output,int index) {
if (index == input.size()) {
return output;
}
output.addFirst(input.get(index));
reverse(input, output,++index);
return output;
}
答案 3 :(得分:0)
// This will work for you
public static void main(String[] args) {
List<Integer> input = new LinkedList<Integer>();
List<Integer> output = new LinkedList<Integer>();
input.add(5);
input.add(1);
input.add(3);
int size = input.size();
System.out.println(reverse(input, size, output));
}
public static List<Integer> reverse(List<Integer> input, int sizeOfInput, List<Integer> output) {
if (sizeOfInput > 0) {
output.add(((LinkedList<Integer>) input).removeLast());
sizeOfInput--;
reverse(input, sizeOfInput, output);
}
return output;
}