首页 > 其他 > 详细

剑指Offer09.用两个栈实现队列

时间:2020-06-30 21:06:36      阅读:50      评论:0      收藏:0      [点我收藏+]

技术分享图片

思路1

  • stack1负责所有操作,stack2只是个过客,辅助stack1

代码

//405ms
public class CQueue {
    Stack<Integer> stack1;
    Stack<Integer> stack2;
    public CQueue() {
        this.stack1=new Stack<>();
        this.stack2=new Stack<>();
    }

    public void appendTail(int value) {
        stack1.add(value);
    }

    public int deleteHead() {
        if(stack1.isEmpty()) return -1;
        while(!stack1.isEmpty()&&stack1.size()>1){
            stack2.add(stack1.pop());
        }
        int res=stack1.pop();
        while(!stack2.isEmpty()){
            stack1.add(stack1.pop());
        }
        return res;
    }
}

思路2

  • stack1负责入队列,stack2负责出队列

代码

//66ms
public class CQueue2 {
    //负责入队列
    Stack<Integer> stack1;
    //负责出队列
    Stack<Integer> stack2;

    public CQueue2() {
        this.stack1 = new Stack<>();
        this.stack2 = new Stack<>();
    }

    public void appendTail(int value) {
        stack1.push(value);
    }

    public int deleteHead() {
        if(!stack2.isEmpty()){
            return stack2.pop();
        }else{
            while (!stack1.isEmpty()){
                stack2.push(stack1.pop());
            }
            return stack2.isEmpty()?-1:stack2.pop();
        }
    }

}

剑指Offer09.用两个栈实现队列

原文:https://www.cnblogs.com/yh-simon/p/13215473.html

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