美文网首页
《剑指offer第二版》题9:用两个栈实现队列

《剑指offer第二版》题9:用两个栈实现队列

作者: leilifengxingmw | 来源:发表于2022-04-20 22:07 被阅读0次

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。

栈是先进后出的,队列是先进先出的。

思路:

  1. 开始 两个栈都为空
  2. 第1个数据来 ,压入到 firstStack
  3. 第2个数据来,压入到 firstStack
  4. 第3个数据来,压入到 firstStack
  5. 取数据,firstStack 把栈中所有的元素 压入secondStack ,然后从secondStack中pop出第一个数据。
  6. 第4个数据来,压入到哪里呢?把secondStack所有元素压入firstStack。firstStack再压入新的数据。

代码实现

class CQueue {

        Stack<Integer> firstStack = new Stack<>();
        Stack<Integer> secondStack = new Stack<>();

        public CQueue() {

        }
        public void appendTail(int value) {
            while (!secondStack.isEmpty()) {
                firstStack.push(secondStack.pop());
            }
            firstStack.push(value);
        }

        public int deleteHead() {
            while (!firstStack.isEmpty()) {
                secondStack.push(firstStack.pop());
            }
            if (secondStack.isEmpty()) {
                return -1;
            }
            return secondStack.pop();
        }
    }

参考链接:

相关文章

网友评论

      本文标题:《剑指offer第二版》题9:用两个栈实现队列

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