无法使用JavaScript中的for循环将堆栈的所有元素推入另一个堆栈
我在HackerRank上练习数据结构,我遇到了一个问题,它说使用两个堆栈实现队列,所以我查找了它,理解了逻辑,它非常简单,而且 就像 :使两个堆栈排队和退队 :对于排队操作,排队堆栈中的push元素 :对于出列操作-首先检查出列堆栈是否为空,如果为空,则从出列堆栈中弹出所有元素,并将其推入出列堆栈中,以便完全反转出列,现在我们可以从出列堆栈中弹出顶部以执行出列操作(返回队列的前部) :如果出列堆栈不是空的,则从队列前面的同一个stcak中弹出。 下面是一个for循环的示例,它传输排队堆栈的所有内容,并使用push和pop操作将它们放入出列堆栈,但for循环的行为异常无法使用JavaScript中的for循环将堆栈的所有元素推入另一个堆栈,javascript,arrays,for-loop,foreach,stack,Javascript,Arrays,For Loop,Foreach,Stack,我在HackerRank上练习数据结构,我遇到了一个问题,它说使用两个堆栈实现队列,所以我查找了它,理解了逻辑,它非常简单,而且 就像 :使两个堆栈排队和退队 :对于排队操作,排队堆栈中的push元素 :对于出列操作-首先检查出列堆栈是否为空,如果为空,则从出列堆栈中弹出所有元素,并将其推入出列堆栈中,以便完全反转出列,现在我们可以从出列堆栈中弹出顶部以执行出列操作(返回队列的前部) :如果出列堆栈不是空的,则从队列前面的同一个stcak中弹出。 下面是一个for循环的示例,它传输排队堆栈的所有
let enqueueStack = [1,2,3,4,5,6]
let dequeueStack = [];
for(let i=0;i<enqueueStack.length;i++){
dequeueStack.push(enqueueStack.pop())
}
console.log(enqueueStack)
console.log(dequeueStack
我试过forEach,但也不起作用
while(enqueueStack.length > 0) {
dequeueStack.push(enqueueStack.pop())
}
或
var elementNumber=enqueueStack.length;
对于(设i=0;i,使用pop函数可以减少排队堆栈的长度,因此,您应该立即分配该长度并向后迭代,而不是每次要比较时都查询该长度
let enqueueStack=[1,2,3,4,5,6]
让dequeueStack=[];
for(设i=enqueueStack.length-1;i>=0;i--){
push(enqueueStack.pop())
}
console.log(排队堆栈)
console.log(dequeueStack)
问题是关于循环操作中的副作用。当您检查enqueueStack.length
时,它会随着您执行的pop()
操作而更改。
您可以通过记录长度值来注意:
let enqueueStack=[1,2,3,4,5,6]
让dequeueStack=[];
for(让i=0;i作为while循环的完美示例!当弹出元素时,您的排队堆栈的长度会发生变化。但是您并不真正关心长度,仅仅是因为排队堆栈是否有更多的元素
let enqueueStack=[1,2,3,4,5,6]
让dequeueStack=[];
while(enqueueStack.length){
push(enqueueStack.pop())
}
console.log(排队堆栈)
console.log(dequeueStack)
这是因为当您开始从排队数组中弹出项目时,计数会减少,在弹出3个项目(即6,5,4)后,排队堆栈长度是3,i的值也是3。因此它会在3个元素处停止
let enqueueStack=[1,2,3,4,5,6]
让dequeueStack=[];
设arrayLength=enqueueStack.length
对于(设i=0;iHint:enqueueStack.pop()
makesenqueueStack.length
down)。
while(enqueueStack.length > 0) {
dequeueStack.push(enqueueStack.pop())
}
var elementNumber = enqueueStack.length;
for(let i=0;i<elementNumberi++){
dequeueStack.push(enqueueStack.pop())
}