美文网首页
剑指 Offer 09. 用两个栈实现队列

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

作者: BitterOutsider | 来源:发表于2020-11-23 10:13 被阅读0次

    问题描述

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

    解题思路

    • 定义两个栈,头栈和尾栈。
    • 每次添加元素都从尾栈压入。
    • 每次删除头元素,分为三种情况:
      • 如果头栈非空,则从头栈直接pop
      • 如果头栈为空,尾栈也为空,则直接返回 -1 。
      • 如果头栈为空,尾栈不为空,则将尾栈元素依次pop出去,并将其压入头栈。最后返回头栈第一个元素。这样就保证了先进先出的原则。
    class CQueue {
        private Stack<Integer> stackHead;
        private Stack<Integer> stackTail;
    
        public CQueue() {
            stackHead = new Stack<>();
            stackTail = new Stack<>();
        }
    
        public void appendTail(int value) {
            stackTail.push(value);
        }
    
        public int deleteHead() {
            if (!stackHead.isEmpty()) {
                return stackHead.pop();
            }
            if (stackTail.isEmpty()) {
                return -1;
            }
            while (!stackTail.isEmpty()) {
                stackHead.push(stackTail.pop());
            }
            return stackHead.pop();
        }
    }
    

    相关文章

      网友评论

          本文标题:剑指 Offer 09. 用两个栈实现队列

          本文链接:https://www.haomeiwen.com/subject/gjemiktx.html