(剑指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;
        }
}
发布了132 篇原创文章 · 获赞 1865 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/JAck_chen0309/article/details/105722150