题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
队列:先进先出;栈:先进后出
用两个栈s1,s2模拟队列,也就是说,只能使用数组的push,pop方法。
对于队列的push操作,就用s1的push就可以。
但是pop操作,要先把s1里的所有内容依次弹出,压入s2。这样本来在s1栈底的那个即将要被弹出的元素,就颠倒顺序跑到了s2的栈顶。然后就pop s2就好了。
但是从s1弹出压入s2这个过程之前,要先判断s2是否为空。如果s2是空的,就执行。否则,就说明s2里还有内容,还有未弹出的,就直接弹出即可。
直到s2再次为空,没有可弹出的了。此时如果还要pop,就说明s1里又push了新元素,那就再把s1弹出压入s2。也就是说,在s2为空之前,就算s1又push了新元素,也不用管。因为s2空了之后,再去s1里现取就可以。
let s1=[]
let s2=[]
function push(node)
{
s1.push(node)
}
function pop()
{
if(s2.length===0){
while(s1.length!==0){
let n=s1.pop()
s2.push(n)
}
}
return s2.pop()
}