题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
第一次提交: 部分案例没通过,代码是这样的:
// 创建两个栈
var stackOne = [];
var stackTwo = [];
function push(node)
{
// write code here
// 入栈
stackOne.push(node);
}
function pop()
{
// write code here
//
while(stackOne.length){
stackTwo.push(stackOne.pop()); //
}
// 循环完成之后,stackTwo栈顶的元素就是队列需要pop出来的元素
return stackTwo.pop();
}
按照上面的代码发现, 我在push4的时候, 第二个栈里面还有数据3,这个时候也满足while条件如果将第一个栈里面的数据直接push到第二个栈中的话,数据3就会被压在底部了,而再执行pop的时候,pop出来的时候是4而不是3。所以,需要添加一个判断条件,只有当第二个栈里面没有数据的时候才需要重新执行while循环体,如果有数据,就需要先把里面的数据pop出来,这样的话pop操作得到数据才是队列从队头一次pop出来的数据。
修改后应该是这样的:
// 创建两个栈
var stackOne = [];
var stackTwo = [];
function push(node)
{
// write code here
// 入栈
stackOne.push(node);
}
function pop()
{
// write code here
// 如果stackTwo是空的就进行该操作
if(!stackTwo.length){
// 不断将stackOne中的数据弹出到stackTwo中
while(stackOne.length){
stackTwo.push(stackOne.pop()); //
}
}
// 循环完成之后,stackTwo栈顶的元素就是队列需要pop出来的元素
return stackTwo.pop();
}