码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-02-13 21:17:39      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:size   push   添加   没有   val   三次   value   void   ack   

技术图片

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. 用两个栈实现队列

标签:size   push   添加   没有   val   三次   value   void   ack   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!