剑指offer05-用两个栈实现队列

117 阅读1分钟

用两个栈实现队列

题目描述

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

思路

  • 两个栈stack1和stack2:
  1. 当插入一个元素时,将其压入stack1;
  2. 当删除一个元素时,首先判断stack2是否为空,当stack2不空时,将stack2的元素弹出。当stack2为空时,将stack1的元素逐个弹出并压入stack2.此时stack2顶端的元素是先进入队列的元素,可以直接弹出。

程序(java)

     /**
     * code1
     */
import java.util.Stack;
public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
     /**
     * push
     * 时间复杂度:O(n),空间复杂度:O(n)
     */
    public void push(int node) {
        stack1.push(node);
    }
    
     /**
     * pop
     * 时间复杂度:O(n),空间复杂度:O(n)
     */
    public int pop() {
        if(stack2.empty()){
            if(stack1.empty()){
                throw new RuntimeException("queue is empty");
            }
            while(!stack1.empty()){
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }
}