0
点赞
收藏
分享

微信扫一扫

剑指 Offer 09:用两个栈实现队列

梯梯笔记 2022-02-17 阅读 79

题目: 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

剑指offer 09

思路
栈是先进后出,假设输入 123,输出则是321
队列是先进先出,假设输入123,输出则是123.
建立一个输入栈s1和输出栈s2,将输入栈的元素移入输出栈,再将s2的元素依次弹出,其效果即如队列。

在这里插入图片描述

class CQueue {
    private Stack<Integer> s1; //输入栈
    private Stack<Integer> s2; //输出栈

    public CQueue() {
        s1=new Stack<>();
        s2=new Stack<>();
    }
    
    public void appendTail(int value) {//直接将元素放入输入栈
         s1.push(value);
    }
    
    public int deleteHead() { 
        if(s1.empty()&&s2.empty()){//两个栈都没有元素时即没有元素输出-1
            return -1;
        }
    
        if(s2.empty()){//如果输出栈为空
            while(!s1.empty()){ //将输入栈s1的都移入输出栈s2
                s2.push(s1.pop());
            }
        }
            return s2.pop();//将s2弹栈即为队列的顺序
    }
}
举报

相关推荐

0 条评论