(剑指offer)面试题09. 用两个栈实现队列

题目

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

思路

根据栈的特性,可知inputstack的底部是最新进入的元素,顶部是最先进入的元素。

outputstack用于保存队列头部元素,当为空时,通过outputstack.push(inputstack.pop());来翻转队列,使得inputstack的底部是最先进入的元素,顶部是最新进入的元素。

代码

class CQueue {

       Stack<Integer> inputstack;
       Stack<Integer> outputstack;
       int size;

        public CQueue() {
            inputstack = new Stack<>();
            outputstack = new Stack<>();//存储头部元素
        }

        public void appendTail(int value) {
            inputstack.push(value);
            size++;
        }
        
        // 若队列中没有元素,则返回-1
        // 如何找到头部元素
        public int deleteHead() {
            Integer tmp = -1;
            if(size < 1){
                return tmp;
            }
            if(outputstack.isEmpty()){
                while (!inputstack.isEmpty()){
                    outputstack.push(inputstack.pop());//将输入队列逆序
                }
            }
            size--;
            tmp = outputstack.pop();
            return tmp;
        }
}
展开阅读全文
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值