用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型
分析
- 凡是进栈操作,都将元素push进栈1
- 出栈分三种情况
- 栈1 栈2 都是空的话,说明队列中什么也没有。直接返回null就行
- 如果栈2 为空,栈1不为空。那么我们将栈1中的所有元素都pop出来并且push进栈2 中去。再将栈2的栈顶元素pop出栈(此时栈2的栈顶元素实际上就是最早push进队列的那个元素,如果不理解可以画图)。因此实现了队列先进先出的效果。
- 如果栈2不为空(其实就是栈1 的元素曾全部pop出来并进了栈2),这时候栈2 中的栈顶元素依然是最先进来的那个,所以直接将其pop即可
var stack1 = [];//栈1
var stack2 = [];//栈2
function push(node)
{
// write code here
stack1.push(node);
}
function pop()
{
// write code here
if((stack1.length == 0) && (stack2.length == 0)){//队列为空,返回null
return null;
}
if(stack2.length == 0){//栈2 为空时,栈1全部进栈2,再pop栈2
while(stack1.length != 0){
stack2.push(stack1.pop());
}
return stack2.pop();
}
else{//栈2不为空,直接pop栈2
return stack2.pop();
}
}