(js实现)剑指offer--用两个栈实现队列

本文介绍了一种使用两个栈来实现队列的方法,通过特定的操作流程,确保了队列的先进先出特性。当需要出栈时,若第二个栈为空,则将第一个栈的所有元素依次出栈并压入第二个栈,再从第二个栈中弹出栈顶元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用两个栈实现队列

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

分析

  • 凡是进栈操作,都将元素push进栈1
  • 出栈分三种情况
  1. 栈1 栈2 都是空的话,说明队列中什么也没有。直接返回null就行
  2. 如果栈2 为空,栈1不为空。那么我们将栈1中的所有元素都pop出来并且push进栈2 中去。再将栈2的栈顶元素pop出栈(此时栈2的栈顶元素实际上就是最早push进队列的那个元素,如果不理解可以画图)。因此实现了队列先进先出的效果。
  3. 如果栈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();
   }
  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值