9.用两个栈实现队列

题目

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

  • 分析

队列的特性是:“先入先出”,栈的特性是:“先入后出”

故:

  1. 当插入时,直接插入 stack1
  2. 当弹出时,当 stack2 不为空,直接弹出 stack2 栈顶元素,如果 stack2 为空,将 stack1 中的全部数逐个出栈入栈 stack2,再弹出 stack2 栈顶元素
3.gif
  • 代码
public class Solution  {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    public void push(int node) {
       stack1.push(node);
    }
    public int pop() throws Exception  {
        //如果stack2为空,则将stack1得所有数据添加进stack2
        if(stack2.isEmpty()){
            while(!stack1.isEmpty()){
                stack2.push(stack1.pop());
            }
        }
        if(stack2.isEmpty()){
            throw new Exception("stack is null");
        }
        //如果stack2不为空,则直接弹出
        return stack2.pop();
    }
}
参考

CS-Notes
何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本系列导航:剑指offer(第二版)java实现导航帖 面试题9:用两个栈实现队列 题目要求:用两个栈,实现队列的...
    ryderchan阅读 5,884评论 0 4
  • 用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 ...
    BluthLeee阅读 689评论 0 0
  • 题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 分析:一个队列包含...
    levinhax阅读 12,387评论 0 4
  • 题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 解题思路: 创建两个...
    乔治大叔阅读 2,662评论 0 0
  • 今天,下午去接马有才,看着无精打彩的,"妈妈,我浑身无劲,下午体育课跑50米,还吐了,我感觉发烧了。"“那你怎么不...
    马有才2008阅读 2,415评论 0 1