DAY 48 leetcode 225--栈和队列.用队列实现栈

时间:2025-04-20 07:00:55

题号225

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

两个队列,一个用来当栈,一个起到备份的作用

class MyStack {

    Queue<Integer> queue1; // 和栈中保持一样元素的队列
    Queue<Integer> queue2; // 辅助队列

    /** Initialize your data structure here. */
    public MyStack() {
        queue1 = new LinkedList<>();
        queue2 = new LinkedList<>();
    }
    
    public void push(int x) {
        queue2.add(x);
        while(!queue1.isEmpty()){
            queue2.add(queue1.poll());//poll函数和pop函数类似,删除队首元素并返回
        }
        Queue <Integer> queuetmp=new LinkedList<>();//创建一个临时队列用于交换
        queuetmp=queue2;
        queue2=queue1;
        queue1=queuetmp;//将q1和q2交换
    }
    
    public int pop() {
        while(!queue1.isEmpty()){
            queue2.add(queue1.poll());
        }
        int head=queue2.poll();
        while(!queue2.isEmpty()){
            queue1.add(queue2.poll());
        }
        return head;

    }
    
    public int top() {
        while(!queue1.isEmpty()){
            queue2.add(queue1.poll());
        }
        int head=queue2.peek();//只返回不删除
        while(!queue2.isEmpty()){
            queue1.add(queue2.poll());
        }
        return head;
    }
    
    public boolean empty() {
        return queue1.isEmpty()&&queue2.isEmpty();
    }
}


相关文章