[LeetCode] #232 用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):

实现 MyQueue 类:

void push(int x) 将元素 x 推到队列的末尾

int pop() 从队列的开头移除并返回元素

int peek() 返回队列开头的元素

boolean empty() 如果队列为空,返回 true ;否则,返回 false

类似于[LeetCode] #225 用队列实现栈

第一种解法

class MyQueue {

    Stack<Integer> in;
    Stack<Integer> out;
    
    /** Initialize your data structure here. */
    public MyQueue() {
        in = new Stack<>();
        out = new Stack<>();
    }
    
    /** Push element x to the back of queue. */
    public void push(int x) {
        while(!out.isEmpty()) in.push(out.pop());
        in.push(x);
        while(!in.isEmpty()) out.push(in.pop());
    }
    
    /** Removes the element from in front of queue and returns that element. */
    public int pop() {
        return out.pop();
    }
    
    /** Get the front element. */
    public int peek() {
        return out.peek();
    }
    
    /** Returns whether the queue is empty. */
    public boolean empty() {
        return out.isEmpty();
    }
}

第二种解法

class MyQueue {
    private Stack<Integer> in;
    private Stack<Integer> out;

    /** Initialize your data structure here. */
    public MyQueue() {
        in = new Stack<>();
        out = new Stack<>();
    }
    
    /** Push element x to the back of queue. */
    public void push(int x) {
        in.push(x);
    }
    
    /** Removes the element from in front of queue and returns that element. */
    public int pop() {
        if(out.isEmpty()){
            while(!in.isEmpty()){
                out.push(in.pop());
            }
        }
        return out.pop();
    }
    
    /** Get the front element. */
    public int peek() {
        if(out.isEmpty()){
            while(!in.isEmpty()){
                out.push(in.pop());
            }
        }
        return out.peek();
    }
    
    /** Returns whether the queue is empty. */
    public boolean empty() {
        return in.isEmpty() && out.isEmpty();
    }
}

知识点:

 

 Stack有设计上的缺陷,官方推荐使用Deque Java双端队列Deque使用详解

总结:

posted @ 2021-09-13 09:44  1243741754  阅读(32)  评论(0编辑  收藏  举报