zoukankan      html  css  js  c++  java
  • 剑指offer第二版面试题9:用两个队列实现栈(JAVA版)

    题目:用两个队列实现栈。

    分析:通过一系列的栈的压入和弹出操作来分析用队列模拟一个栈的过程,如图所示,我们先往栈内压入一个元素a。由于两个队列现在都是空,我们可以选择把a插入两个队列中的任一个。我们不妨把a插入queue1。接下来继续往栈内压入b,c两个元素。我们把它们都插入queue1。这个时候 queue1包含3个元素a,b,c其中a位于队列的头部,c位于队列的尾部。

    现在我们考虑从栈内弹出一个元素。根据栈的后进先出的原则,最后被压入栈的c应该最先被弹出。由于c位于queue1的尾部,而我们每次只能从队列的头部删除元素,因此我们可以从queue中依次删除a/b并插入到queue2中,再从queue1中删除c。这就相当于从栈中弹出元素c了。我们可以用同样的方法从栈内弹出元素b。

    接下来我们考虑从栈内压入一个元素d.此时queue1已经有了一个元素,我们就把d插入到queue1的尾部。如果我们再从栈内弹出一个元素,此时被弹出的应该是最后被压入的d.由于d位于queue1的尾部,我们只能先从头部删除 queue1的元素并插入到queue2,直到queue1中遇到d再直接把它删除。如图所示:

    代码如下:

    public class MyStack {
        private Queue<Integer> queue1;
        private Queue<Integer> queue2;
        public MyStack(){
            queue1=new LinkedList<>();
            queue2=new LinkedList<>();
        }
        
        //添加,哪个队列不是空则添加到那个队列
        public void push(Integer num){
            if(queue1.size()==0 && queue2.size()==0){
                queue1.add(num);
            }else if(queue1.size()==0){
                queue2.add(num);
            }else{
                queue1.add(num);
            }
        }
        
        //删除
        public Integer pop(){
            if(queue1.size() == 0 && queue2.size() == 0){
                return null;
            }
            int value=0;
            if(queue1.size()>0){
                while(queue1.size()>0){
                    queue2.add(queue1.remove());
                }
                value=queue1.remove();
            }
            if(queue2.size()>0){
                while(queue2.size()>0){
                    queue1.add(queue2.remove());
                }
                value=queue2.remove();
            }
            return value;
        }
    }
  • 相关阅读:
    快速幂模板
    部分有关素数的题
    POJ 3624 Charm Bracelet (01背包)
    51Nod 1085 背包问题 (01背包)
    POJ 1789 Truck History (Kruskal 最小生成树)
    HDU 1996 汉诺塔VI
    HDU 2511 汉诺塔X
    HDU 2175 汉诺塔IX (递推)
    HDU 2077 汉诺塔IV (递推)
    HDU 2064 汉诺塔III (递推)
  • 原文地址:https://www.cnblogs.com/xhlwjy/p/11259319.html
Copyright © 2011-2022 走看看