Not able to push all elements of a stack into another stack using for loop in JavaScript?

When transferring elements from one stack to another using a for loop, you need to understand that the stack follows the Last In First Out (LIFO) principle. The key is to pop() elements from the source stack and push() them into the destination stack.

The Stack Transfer Process

When you pop elements from the first stack and push them into the second stack, the order gets reversed because of the LIFO nature:

var myFirstStack = [10, 20, 30, 40, 50, 60, 70];
var mySecondStack = [];

console.log("Original first stack:", myFirstStack);
console.log("Original second stack:", mySecondStack);

for (; myFirstStack.length;) {
    mySecondStack.push(myFirstStack.pop());
}

console.log("After popping all elements from the first stack:");
console.log(myFirstStack);
console.log("After pushing all elements into the second stack:");
console.log(mySecondStack);
Original first stack: [ 10, 20, 30, 40, 50, 60, 70 ]
Original second stack: []
After popping all elements from the first stack:
[]
After pushing all elements into the second stack:
[ 70, 60, 50, 40, 30, 20, 10 ]

Understanding the Reversal

The elements get reversed because:

  • First pop(): removes 70 (last element) and pushes to second stack
  • Second pop(): removes 60 and pushes to second stack
  • This continues until the first stack is empty
var stack1 = [1, 2, 3];
var stack2 = [];

console.log("Step-by-step transfer:");
let step = 1;

while (stack1.length > 0) {
    let element = stack1.pop();
    stack2.push(element);
    console.log(`Step ${step}: Moved ${element}`);
    console.log(`Stack1: [${stack1}], Stack2: [${stack2}]`);
    step++;
}
Step-by-step transfer:
Step 1: Moved 3
Stack1: [1,2], Stack2: [3]
Step 2: Moved 2
Stack1: [1], Stack2: [3,2]
Step 3: Moved 1
Stack1: [], Stack2: [3,2,1]

Alternative: Preserving Original Order

If you want to maintain the original order, you need to transfer twice:

var originalStack = [10, 20, 30, 40];
var tempStack = [];
var finalStack = [];

// First transfer: original to temp (reverses order)
while (originalStack.length > 0) {
    tempStack.push(originalStack.pop());
}

// Second transfer: temp to final (reverses back to original)
while (tempStack.length > 0) {
    finalStack.push(tempStack.pop());
}

console.log("Final stack with preserved order:", finalStack);
Final stack with preserved order: [ 10, 20, 30, 40 ]

Conclusion

The for loop successfully transfers all elements between stacks, but the LIFO principle causes order reversal. This is expected behavior - use double transfer if you need to preserve the original order.

Updated on: 2026-03-15T23:18:59+05:30

328 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements