06-用两个栈实现队列

题目:用两个栈来实现一个队列,完成队列的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();
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值