Related Articles
Reversing a Stack with the help of another empty Stack
• Difficulty Level : Easy
• Last Updated : 05 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:

Explanation:
Input Stack:

Reversed Stack:

5

Input: stack = {1, 3, 5, 4, 2}
Output:

2

Approach: Follow the steps below to solve the problem:

Below is the implementation of the above approach.

## C++

 `// C++ program to reverse a stack``// by using an extra stack``#include ``using` `namespace` `std;` `// Function to transfer elements of``// the stack s1 to the stack s2``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.top();` `        ``// Pop out of the stack``        ``s1.pop();` `        ``// Push it into s2``        ``s2.push(temp);``    ``}``}` `// Function to reverse a stack using another stack``void` `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 Code``int` `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;``}`

## Python3

 `# Python3 program to reverse a stack``# by using an extra stack` `# Function to transfer elements of``# the stack s1 to the stack s2``def` `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 stack``def` `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 Code``if` `__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`
Output:
`1 2 3 4 5`

Time Complexity: O(N2
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up