# 用两个栈实现队列

# 题目描述

用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。 队列中的元素为 int 类型。

# 思路

栈的特点是:先进后出。

队列的特点是:先进先出。

队列的 push 操作是向队列添加一个元素,pop 操作是从队列弹出一个元素。我们要保证弹出的元素是最先进队列的元素。

用两个栈:一个栈(entryStack)用于入队列,一个栈(outputStack)用于出队列,当队列 push 操作时把元素压入 entryStack 中,当队列 pop 操作时把 entryStack 中的元素取出来放入 outputStack 中,这样就相当于 outputStack 中的元素与 entryStack 刚好相反,就完成了最先 pushentryStack 的元素在 outputStack 中的最前面,最终队列进行 pop 操作时就从 outputStack 中弹出一个元素即可。

# 代码

let entryStack = [];
let outputStack = [];
function push(node) {
  entryStack.push(node);
}
function pop() {
  if (!outputStack.length) {
    while (entryStack.length) {
      // 把 entryStack 中的元素弹出来放入 outputStack 中
      outputStack.push(entryStack.pop());
    }
  }
  // 最终从outputStack中弹出一个元素返回即可
  return outputStack.pop();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15