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
Recommended Articles
Page :