# 用两个栈实现队列
# 题目描述
用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。 队列中的元素为 int 类型。
# 思路
栈的特点是:先进后出。
队列的特点是:先进先出。
队列的 push
操作是向队列添加一个元素,pop
操作是从队列弹出一个元素。我们要保证弹出的元素是最先进队列的元素。
用两个栈:一个栈(entryStack
)用于入队列,一个栈(outputStack
)用于出队列,当队列 push
操作时把元素压入 entryStack
中,当队列 pop
操作时把 entryStack
中的元素取出来放入 outputStack
中,这样就相当于 outputStack
中的元素与 entryStack
刚好相反,就完成了最先 push
进 entryStack
的元素在 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15