232. 用栈实现队列-day09https://chuna2.787528.xyz/whq2001

题目:232. 用栈实现队列
题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/
思路:定义两个栈,一个作为出栈,一个作为入栈。
代码:

点击查看代码
class MyQueue {
    Deque<Integer> inStack;
    Deque<Integer> outStack;
    public MyQueue() {
        inStack=new ArrayDeque<Integer>();
        outStack=new ArrayDeque<Integer>();

    }
    
    public void push(int x) {
        inStack.push(x);
    }
    
    public int pop() {
        if(outStack.isEmpty()){
            in2out();
        }
        return outStack.pop();
    }
    
    public int peek() {
        if (outStack.isEmpty()) {
            in2out();
        }
        return outStack.peek();
    }
    
    public boolean empty() {
         return inStack.isEmpty() && outStack.isEmpty();
    }
    private void in2out() {
        while (!inStack.isEmpty()) {
            outStack.push(inStack.pop());
        }
    }

}

题目:225. 用队列实现栈
题目链接:https://leetcode.cn/problems/implement-stack-using-queues/description/
思路:队列(Queue):先进先出,只能从「队尾添加」、「队头删除」;
栈(Stack):先进后出,只能从「栈顶添加 / 删除」;
核心思路:每次新增元素时,利用辅助队列 queue2 「反转元素顺序」,让新添加的元素始终在 queue1 的队头(对应栈顶),从而实现栈的「先进后出」
代码:

点击查看代码
class MyStack {
    Queue<Integer> queue1;
    Queue<Integer> queue2;
    public MyStack() {
        queue1 = new LinkedList<Integer>();
        queue2 = new LinkedList<Integer>();

    }
    
    public void push(int x) {
       // 步骤1:先把新元素x添加到辅助队列queue2的队尾
    queue2.offer(x);
    
    // 步骤2:把主队列queue1的所有元素「转移」到queue2的队尾
    while (!queue1.isEmpty()) {
        queue2.offer(queue1.poll());
    }
    
    // 步骤3:交换queue1和queue2的引用,让queue2变回空队列,queue1存储反转后的元素
    Queue<Integer> temp = queue1;
    queue1 = queue2;
    queue2 = temp;
    }
    
    public int pop() {
        return queue1.poll();
    }
    
    public int top() {
         return queue1.peek();
    }
    
    public boolean empty() {
          // 栈为空的条件:主队列queue1为空(辅助队列queue2始终为空,无需判断)
    return queue1.isEmpty();
    }
}

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack obj = new MyStack();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.top();
 * boolean param_4 = obj.empty();
 */
posted @ 2026-01-25 18:21  whq001  阅读(4)  评论(0)    收藏  举报