程序员面试算法之用栈实现队列

使用栈实现队列的下列操作:

  • push(x) — 将一个元素放入队列的尾部。
  • pop() — 从队列首部移除元素。
  • peek() — 返回队列首部的元素。
  • empty() — 返回队列是否为空。

示例:

MyQueue queue = new MyQueue();

queue.push(1);
queue.push(2);  
queue.peek();  // 返回 1
queue.pop();   // 返回 1
queue.empty(); // 返回 false
import java.util.Stack;

public class MyQueue {
    private Stack<Integer> stackPush;
    private Stack<Integer> stackPop;

    public MyQueue() {
        this.stackPush = new Stack<>();
        this.stackPop = new Stack<>();
    }

    public void push(int x) {
        this.stackPush.push(x);
    }

    private void transerData() {
        if(this.stackPop.isEmpty()) {
            while(!this.stackPush.isEmpty()) {
                this.stackPop.push(this.stackPush.pop());
            }
        }
    }

    public int pop() {
        this.transerData();
        return this.stackPop.pop();
    }

    public int peek() {
        this.transerData();
        return this.stackPop.peek();
    }

    public boolean empty() {
        if(this.stackPop.isEmpty() && this.stackPush.isEmpty()) {
            return true;
        }
        
        this.transerData();
        return this.stackPop.isEmpty();
    }
}

 

点赞