力扣232题、225题(栈实现队列,队列实现栈)

232、栈实现队列

代码:

class MyQueue {
    Stack<Integer> stackOut;
    Stack<Integer> stackIn;
    public MyQueue() {
        stackOut = new Stack<>();//负责出栈
        stackIn = new Stack<>();//负责进栈
    }
    
    public void push(int x) {
        stackIn.push(x);
    }
    
    public int pop() {
        dumpStackIn();
        return stackOut.pop();
    }
    
    public int peek() {
        dumpStackIn();
        return stackOut.peek();
    }
    
    public boolean empty() {
        return stackIn.isEmpty() && stackOut.isEmpty();
    }

    private void dumpStackIn(){
        if (stackOut.isEmpty()){
            while (!stackIn.isEmpty()){
                stackOut.push(stackIn.pop());
            }
        }
    }
}

225、队列实现栈

具体实现:

 代码:

class MyStack {
    Deque<Integer> que1; // 和栈中保持一样元素的队列
    Deque<Integer> que2; // 辅助队列


    public MyStack() {
        que1 = new ArrayDeque<>();
        que2 = new ArrayDeque<>();
    }
    
    public void push(int x) {
        que1.addLast(x);
    }
    
    public int pop() {
        int size = que1.size();
        size--;
         // 将 que1 导入 que2 ,但留下最后一个值
        while (size-- > 0){
            que2.addLast(que1.peekFirst());
            que1.pollFirst();
        }

        int res = que1.pollFirst();
        que1 = que2; // 将 que2 对象的引用赋给了 que1 ,此时 que1,que2 指向同一个队列
        que2 = new ArrayDeque<>();// 如果直接操作 que2,que1 也会受到影响,所以为 que2 分配一个新的空间
        return res;
    }
    
    public int top() {
        return que1.peekLast();
    }
    
    public boolean empty() {
        return que1.isEmpty();
    }
}
原文地址:https://www.cnblogs.com/zhaojiayu/p/15501581.html