刷题日记09 | 232.用栈实现队列、225. 用队列实现栈

95 阅读1分钟

刷题日记09

今天的主题:栈与队列

232. 用栈实现队列

用栈实现队列需要两个栈来模拟队列,在弹出时先把in里面的元素全部转移到out里。

在转移之前,如果out里有元素,那就直接弹出。这里写了一个dump函数专门做转移。值得注意的是如果out里有元素了,还进行转移会导致元素顺序混乱。

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

    public MyQueue() {
        in = new Stack<Integer>();
        out = new Stack<Integer>();
    }
    
    public void push(int x) {
        in.push(x);
    }
    
    public int pop() {
        dumpInToOut();
        return out.pop();
    }
    
    public int peek() {
        dumpInToOut();
        return out.peek();
    }
    
    public boolean empty() {
        return in.empty() && out.empty();
    }

    public void dumpInToOut(){
        // 如果out不为空,则不进行dump,否则会导致元素顺序混乱
        if(!out.isEmpty()) return;
        while(!in.isEmpty()){
            int temp = in.pop();
            out.push(temp);
        }
    }
}

225. 用队列实现栈

这里复习一下java里的双端队列Deque

添加元素:offer(), offerFirst(), offerLast()

返回元素:peek(), peekFirst(), peekLast()

弹出元素:poll(), pollFirst(), pollLast()

class MyStack {
    Deque<Integer> queue;
    public MyStack() {
        queue = new ArrayDeque<>();
    }
    
    public void push(int x) {
        queue.offerLast(x);
    }
    
    public int pop() {
        return queue.pollLast();
    }
    
    public int top() {
        return queue.peekLast();
    }
    
    public boolean empty() {
        return queue.size() == 0;
    }
}