首页 > 其他 > 详细

面试题09. 用两个栈实现队列

时间:2020-02-13 22:01:44      阅读:57      评论:0      收藏:0      [点我收藏+]

技术分享图片

class CQueue {
    private Stack<Integer> stack1;
    private Stack<Integer> stack2;
    public CQueue() {
        this.stack1 = new Stack<>();
        this.stack2 = new Stack<>();
    }
    
    public void appendTail(int value) {
        //压入栈1
        stack1.push(value);
    }
    
    public int deleteHead() {
        if(stack2.isEmpty()){
            if(stack1.isEmpty()){
                //只有当栈1和栈2都为空时,才代表没有数据了,返回-1
                 return -1;
            }else{
                while(!stack1.isEmpty()){
                    //stack2为空,但是stack1不为空,则代表队列还有缓存数据未入队
                    //将这些缓存数据压入栈2中
                    stack2.push(stack1.pop());
                }
            }
        }
        return stack2.pop();
    }
}

 举例:

  添加四个元素{1,2,3,4}

  出队1次

  此时stack1为空 stack2.size == 3({2,3,4})

  添加元素5

  此时stack1.size == 1({5})  stack2.size == 3({2,3,4})

  连续执行三次出队操作

  此时stack1.size == 1({5})  stack2.size == 0,即stack2为空

  但是此时stack1不为空,代表着仍然有缓存元素未入队

  将stack1的元素全部弹栈并压入stack2

  此时stack1.size == 0即stack1为空  stack2.size == 1({5})

  执行一次出队操作

  此时stack1.size == 0即stack1为空  stack2.size == 0即stack2为空

  如果再执行出队操作,则返回-1

面试题09. 用两个栈实现队列

原文:https://www.cnblogs.com/hzqshuai/p/12304924.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!