仅使用Java中的队列来反转堆栈?

时间:2017-02-27 11:04:20

标签: java stack queue reverse

我需要遍历堆栈直到它为空,将每个元素添加到队列中。然后做相反的事情。循环队列直到它为空,将每个元素添加回堆栈

public class Q1 {

    public static void reverseStack(Stack st){
    }
}

这是我的测试:

public class Q1Test {

    @Test
    public void testQ1() {
        Stack st = new Stack(5);
        st.push("A");
        st.push("B");
        Q1.reverseStack(st);
        assertEquals("A",(String) st.top());
    }
}

我一直在努力做Q1代码并且永远不会让它成功并且总是最终失败。任何人都可以实现上述方法,以使Q1测试成功吗?

1 个答案:

答案 0 :(得分:0)

这是一个有效的例子:

Q1.java

import java.util.ArrayList;
import java.util.List;

public class Q1 {

    private List<String> list;

    public Q1() {
        list = new ArrayList<String>();
    }

    public String pop_front() {
        if (!list.isEmpty()) {
            String front = list.get(0);    
            for (int i = 0; i < list.size()-1; i++) {
                list.set(i, list.get(i+1));
            }
            list.remove(list.size()-1);
                return front;
        } else {
            return null;
        }
    }

    public void push_back(String obj) {
        list.add(obj);
    }

    public String front() {
        if (!list.isEmpty()) {
            return list.get(0);
        } else {
            return null;
        }
    }

    public boolean isEmpty() {
        return list.isEmpty();
    } 

    public static void reverseStack(Stack stack) {
        Q1 queue = new Q1();
        while (!stack.isEmpty()) {
            queue.push_back(stack.pop());
        }
        while (!queue.isEmpty()) {
            stack.push(queue.pop_front());
        }
    }
}

Stack类:

Stack.java

 package com.dub;


    import java.util.ArrayList;
    import java.util.List;

    public class Stack {

        private List<String> list;

        public Stack() {
            list = new ArrayList<String>();
        }

        public String pop() {
            if (!list.isEmpty()) {
                String top = list.get(list.size()-1);

                list.remove(list.size()-1);

                return top;
            } else {
                return null;
            }
        }

        public void push(String obj) {
            list.add(obj);
        }

        public String top() {
            if (!list.isEmpty()) {
                return list.get(list.size()-1);
            } else {
                return null;
            }
        }

        public boolean isEmpty() {
            return list.isEmpty();
        }

    }

现在测试方法:

public static void main(String[] args) {

    Stack stack = new Stack();

    stack.push("A");
    stack.push("B");
    stack.push("C");

    System.out.println("top: " + stack.top());

    Q1.reverseStack(stack);

    System.out.println("top: " + stack.top());

}

按预期打印:

top:C

顶部:A