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

2022-04-20  本文已影响0人  leilifengxingmw

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数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();
        }
    }

参考链接:

上一篇 下一篇

猜你喜欢

热点阅读