在java中反转堆栈

时间:2017-06-01 12:28:19

标签: java stack queue reverse

    public static void reverse(Stack arr){
    Queue<Integer> arrCopy=new LinkedList<Integer>();
    while(!arr.empty()){
        arrCopy.add((int)arr.pop());
    };
    System.out.print("{ ");
    while(!arrCopy.isEmpty()){
        System.out.print((int)arrCopy.remove() + ", ");
    }
    System.out.print("}");
}

所以,我有一个10个整数的堆栈,我想反向打印它。我写了一个创建队列的新方法,每次使用pop删除并从堆栈中返回一个整数时,它会将它添加到队列中。问题是while(!arrCopy.isEmpty())似乎没有执行,队列是空的。这里有铸造问题吗?或者我在队列中添加元素的方式有问题吗?

谢谢!

编辑: 这是我的main函数的代码(这是我的其余代码):

public static void main(String[] args) {
        Random rand = new Random();
        Stack<Integer> a=new Stack<Integer>();

        for (int i=0; i<10; i++){
            a.push(rand.nextInt(50));
        }
        System.out.print("{ ");
        while(!a.empty()){
            System.out.print((int)a.pop() + ", ");
        }
        System.out.print("}");

        reverse(a);


}

溶液: 我得到了它的工作,谢谢!问题是我使用pop返回(但删除)堆栈中的所有元素,以便在反转之前打印它,这导致了一个空堆栈。这就是我改变它的方式!

    public static Queue reverse(Stack arr){
    Queue<Integer> arrCopy=new LinkedList<Integer>();
    while(!arr.empty()){
        arrCopy.add((int)arr.pop());
    }
    return arrCopy;
}

public static void main(String[] args) {
        Random rand = new Random();
        Stack<Integer> a=new Stack<Integer>();

        for (int i=0; i<10; i++){
            a.push(rand.nextInt(50));
        }

         System.out.println("List:");
         System.out.println(a);

         System.out.println("Reversed List:");
         System.out.println(reverse(a));


}

2 个答案:

答案 0 :(得分:0)

使用下面的代码反转堆栈顺序。这扭转了秩序。

import java.util.Collections;
import java.util.Stack;

public class Test {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        for (int i = 0; i < 10; i++) {
            stack.push(i);
        }

        System.out.println("Before reverse" + stack);
        reverse(stack);
    }

    public static void reverse(Stack<Integer> arr){
        arr.sort(Collections.reverseOrder());
        System.out.println("After reverse");
        System.out.println(arr);
    }
}

Out put是:

Before reverse[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
After reverse
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

答案 1 :(得分:0)

下面:

var RequestDict = [String: AnyObject]()

func API() {
self.RequestDict = result["rows"]![0]["value"] as! [String: AnyObject]

}

您在调用while(!a.empty()){ System.out.print((int)a.pop() + ", "); } System.out.print("}"); reverse(a); 之前清空堆栈。如果在reverse返回true之前继续从堆栈弹出元素,那么你已经清空了堆栈,并且你将空堆栈传递给a.empty()方法。

为什么不使用:

reverse

无需弹出堆叠中的所有元素即可打印它们。