因此,我设法借助堆栈实现了对ArrayList(字符串)的反转,但是我无法弄清楚如何对整数进行处理。我收到堆栈为空的错误,有什么想法吗? [Java]
代码如下:
package Class;
import java.util.ArrayList;
import java.util.Stack;
public class Class
{
static ArrayList<Integer> list = new ArrayList();
static Stack<Integer> stack = new Stack();
public static ArrayList<Integer> reverseList(ArrayList<Integer> n)
{
for(int i = 0; i < n.size(); i++)
{
stack.push(n.get(i));
n.remove(0);
}
for(int i = 0; i != stack.size();)
{
n.add(stack.pop());
}
return n;
}
public static void main(String[] args)
{
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
System.out.println(list);
ArrayList n = reverseList(list);
System.out.println(n);
}
}
错误是空堆栈错误。
答案 0 :(得分:1)
如果不重新发明轮子,就不能使用:
Collections.reverse(list);
涉及问题时,请点击此处:
for(int i = 0; i < n.size(); i++)
{
stack.push(n.get(i));
n.remove(0);
}
您始终会删除第一个元素,但是在此之后添加一些中间元素会导致某些元素丢失。为此,您应该使用Iterator
。请查看documentation了解详细说明。
答案 1 :(得分:1)
代替
for(int i = 0; i < n.size(); i++)
{
stack.push(n.get(i));
n.remove(0);
}
执行此操作
for(int i = 0; i < n.size(); i++)
{
stack.push(n.get(i));
}
n.clear();
它应该可以正常工作。
答案 2 :(得分:1)
正如已经指出的那样,这是一个主要问题:
for(int i = 0; i < n.size(); i++)
{
stack.push(n.get(i));
n.remove(0);
}
在这里,您总是从列表中删除第一个元素,但是将元素从索引i
处添加到堆栈中。
让我们分析一下您的1、2、3、4、5列表:
i = 0
,因此您按1并从列表中删除1,现在列表变为2、3、4、5 i = 1
,因此您按3并删除2,所以现在的列表是3、4、5 i = 2
,所以您按5并删除3。列表现在为4、5,并且长度小于i
,因此循环停止。问题:您没有调整i
以适应删除要求。
按照m.k的建议,您可以将所有元素添加到堆栈中,然后删除所有元素。
或者使用迭代器:
for( Iterator<Integer> itr = n.iterator(); itr.hasNext(); ) {
stack.push(itr.next()); //this advances the iterator so only call next() once per iteration
itr.remove(); //this removes the element from the list
}
答案 3 :(得分:0)
public static ArrayList<Integer> reverseList(ArrayList<Integer> n) {
for(int i = n.size()-1; i >=0; i--) {
stack.push(n.get(i));
}
n.clear();
while (stack.size() !=0)
n.add(stack.pop());
return n;
}
有很多方法可以逆转事情,但是使用堆栈似乎很重要,因此请使用上面的代码稍微更改一下方法