使用Stack反向ArrayList

时间:2014-07-16 03:50:24

标签: java arraylist stack

我应该将一个Arraylist提供给一个堆栈,然后显然从该堆栈中构建一个列表。理论上这意味着列表应该颠倒,是吗?我以为我把它放在包里,但我的输出是:

 [1, 2, 3, 4, 5]
 AAAAANNNDDDDD REVERSE!
 [1, 2, 3, 4, 5]

显然我在某个地方蠢蠢欲动,但我不知道在哪里。代码如下,但要注意,我对此并不擅长,所以如果有一些东西可怕地冒犯你,但实际上并不是问题,我宁愿它不是讨论的焦点。

package stackclass;

import java.util.ArrayList;
import java.util.Stack;

public class StackClass 
{
 static ArrayList<String> list = new ArrayList();
 static Stack<String> popper = new Stack();

public static ArrayList<String> reverse(ArrayList<String> n)
{
    for(int i = 0; i != n.size();)
    {
        popper.push(n.get(n.size() - 1));
        n.remove(n.size() - 1);
    }
    for(int i = 0; i != popper.size();)
    {
        n.add(popper.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);

    System.out.println("AAAAANNNDDDDD REVERSE!");

    ArrayList n = reverse(list);

    System.out.println(n);
}
}

感谢任何和所有帮助。

2 个答案:

答案 0 :(得分:1)

在你的第一个for循环中,你应该从列表中取出第一个元素而不是最后一个元素:

public static ArrayList<String> reverse(ArrayList<String> n)
{
    for(int i = 0; i < n.size(); i++)
    {
        popper.push(n.get(i));
        n.remove(0);
    }
    for(int i = 0; i != popper.size(); i++)
    {
        n.add(popper.pop());
    }
    return n;
}

你也缺少增加你的计数器(i ++)

答案 1 :(得分:1)

public static ArrayList<String> reverse(ArrayList<String> n)
    {
        while(!n.isEmpty())
        {
            popper.push(n.get(0));
            n.remove(0);
        }
        while(!popper.isEmpty()){
            n.add(popper.pop());
        }

        return n;
    }

这很有效。