Reversing a Stack with the help of another empty Stack

31 May, 2021
Given a Stack consisting of N elements, the task is to reverse the Stack using an extra stack.
Examples:
Input: stack = {1, 2, 3, 4, 5} Output: 1 2 3 4 5 Explanation: Input Stack: 5 4 3 2 1 Reversed Stack: 1 2 3 4 5
Input: stack = {1, 3, 5, 4, 2} Output: 1 3 5 4 2
Approach: Follow the steps below to solve the problem:
Initialize an empty stack.
Pop the top element of the given stack S and store it in a temporary variable.
Transfer all the elements of the given stack to the stack initialized above.
Push the temporary variable into the original stack.
Transfer all the elements present in the new stack into the original stack.
Below is the implementation of the above approach.
C++
Java
Python3
C#
Javascript
// C++ program to reverse a stack// by using an extra stack#include <bits/stdc++.h>using namespace std; // Function to transfer elements of// the stack s1 to the stack s2void transfer(stack<int>& s1,              stack<int>& s2, int n){    for (int i = 0; i < n; i++) {         // Store the top element        // in a temporary variable        int temp = s1.top();         // Pop out of the stack        s1.pop();         // Push it into s2        s2.push(temp);    }} // Function to reverse a stack using another stackvoid reverse_stack_by_using_extra_stack(stack<int>& s,                                        int n){    stack<int> s2;     for (int i = 0; i < n; i++) {         // Store the top element        // of the given stack        int x = s.top();         // Pop that element        // out of the stack        s.pop();         transfer(s, s2, n - i - 1);        s.push(x);        transfer(s2, s, n - i - 1);    }} // Driver Codeint main(){    int n = 5;     stack<int> s;    s.push(1);    s.push(2);    s.push(3);    s.push(4);    s.push(5);     reverse_stack_by_using_extra_stack(s, n);     for (int i = 0; i < n; i++) {        cout << s.top() << " ";        s.pop();    }    return 0;}
// Java program to reverse a stack// by using an extra stackimport java.io.*;import java.util.*; class GFG{   // Function to transfer elements of// the stack s1 to the stack s2static void transfer(Stack<Integer> s1,                     Stack<Integer> s2, int n){    for(int i = 0; i < n; i++)    {                 // Store the top element        // in a temporary variable        int temp = s1.peek();         // Pop out of the stack        s1.pop();         // Push it into s2        s2.push(temp);    }} // Function to reverse a stack using another stackstatic void reverse_stack_by_using_extra_stack(Stack<Integer> s,                                               int n){    Stack<Integer> s2 = new Stack<Integer>();     for(int i = 0; i < n; i++)    {                 // Store the top element        // of the given stack        int x = s.peek();         // Pop that element        // out of the stack        s.pop();         transfer(s, s2, n - i - 1);        s.push(x);        transfer(s2, s, n - i - 1);    }} // Driver Codepublic static void main(String[] args){    int n = 5;     Stack<Integer> s = new Stack<Integer>();    s.push(1);    s.push(2);    s.push(3);    s.push(4);    s.push(5);     reverse_stack_by_using_extra_stack(s, n);     for(int i = 0; i < n; i++)    {        System.out.print(s.peek() + " ");        s.pop();    }}} // This code is contributed by Dharanendra L V.
# Python3 program to reverse a stack# by using an extra stack # Function to transfer elements of# the stack s1 to the stack s2def transfer(s1, s2, n):         for i in range(n):         # Store the top element        # in a temporary variable        temp = s1[-1]         # Pop out of the stack        s1.pop()         # Push it into s2        s2.append(temp) # Function to reverse a stack using another stackdef reverse_stack_by_using_extra_stack(s, n):     s2 = []         for i in range(n):         # Store the top element        # of the given stack        x = s[-1]         # Pop that element        # out of the stack        s.pop()         transfer(s, s2, n - i - 1)        s.append(x)        transfer(s2, s, n - i - 1) # Driver Codeif __name__ == "__main__":     n = 5     s = []    s.append(1)    s.append(2)    s.append(3)    s.append(4)    s.append(5)     reverse_stack_by_using_extra_stack(s, n)     for i in range(n):        print(s[-1], end = " ")        s.pop()         # This code is contributed by ukasp
// C# program to reverse a stack// by using an extra stackusing System;using System.Collections.Generic; class GFG{ // Function to transfer elements of// the stack s1 to the stack s2static void transfer(Stack<int> s1,              Stack<int> s2, int n){    for (int i = 0; i < n; i++) {         // Store the top element        // in a temporary variable        int temp = s1.Peek();         // Pop out of the stack        s1.Pop();         // Push it into s2        s2.Push(temp);    }} // Function to reverse a stack using another stackstatic void reverse_stack_by_using_extra_stack(Stack<int> s,                                        int n){    Stack<int> s2 = new Stack<int>();      for (int i = 0; i < n; i++) {         // Store the top element        // of the given stack        int x = s.Peek();         // Pop that element        // out of the stack        s.Pop();         transfer(s, s2, n - i - 1);        s.Push(x);        transfer(s2, s, n - i - 1);    }} // Driver Codepublic static void Main(){    int n = 5;     Stack<int> s = new Stack<int>();     s.Push(1);    s.Push(2);    s.Push(3);    s.Push(4);    s.Push(5);     reverse_stack_by_using_extra_stack(s, n);     for (int i = 0; i < n; i++) {        Console.Write(s.Peek() + " ");        s.Pop();    }}} // This code is contributed by SURENDRA_GANGWAR.
<script> // JavaScript program to reverse a stack// by using an extra stack // Function to transfer elements of// the stack s1 to the stack s2function transfer(s1, s2, n){    for (i = 0; i < n; i++) {         // Store the top element        // in a temporary variable        var temp = s1[s1.length-1];         // Pop out of the stack        s1.pop();         // Push it into s2        s2.push(temp);    }} // Function to reverse a stack using another stackfunction reverse_stack_by_using_extra_stack(s,n){    var s2 = [];    var i;    for (i = 0; i < n; i++) {         // Store the top element        // of the given stack        var x = s[s.length-1];         // Pop that element        // out of the stack        s.pop();         transfer(s, s2, n - i - 1);        s.push(x);        transfer(s2, s, n - i - 1);    }} // Driver Code    var n = 5;     var s = []    s.push(1);    s.push(2);    s.push(3);    s.push(4);    s.push(5);     reverse_stack_by_using_extra_stack(s, n);    var i;    for (i = 0; i < n; i++) {        document.write(s[s.length-1] + ' ');        s.pop();    } </script>
1 2 3 4 5
 
Time Complexity: O(N2) Auxiliary Space: O(N)
 
ukasp
dharanendralv23
SURENDRA_GANGWAR
ipg2016107
cpp-stack-functions
Reverse
Stack
Stack
Reverse
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Data Structures
What is Data Structure: Types, Classifications and Applications
Design a stack with operations on middle element
How to efficiently implement k stacks in a single array?
Next Smaller Element
Real-time application of Data Structures
Construct Binary Tree from String with bracket representation
ZigZag Tree Traversal
Reverse individual words
Length of the longest valid substring