In reverse a stack using recursion problem, we have given a stack data structure. Reverse its elements using recursion. Only the below-listed functions of the stack can be used –
- push(element) – to insert the element in the stack.
- pop() – to remove/delete the element at the top of the stack.
- isEmpty() – to check if there is any element in the stack or not.
Table of Contents
Example
Input : 5 4 3 2 1
Output : 1 2 3 4 5
Input : 300 200 100
Output : 100 200 300
Method
Create the stack and two functions. First bottom_insert() to insert the elements at the bottom of the stack and another one reverse() to pop all the elements and call for bottom_insert() which will result in the reversed stack.
Algorithm for Reverse a Stack Using Recursion
- Initialize a stack and push elements in it.
- Create a function to insert the elements at the bottom of the stack which accepts an element as a parameter. Check if the size of the stack is equal to 0, push the element in the stack.
- Else create a variable a and store the top of the stack in it. Pop the top of the stack and make the recursive call to the function itself. Push the variable a in the stack.
- Similarly, create a function reverse(). Check if the size of the stack is greater than 0, create a variable x, and store the top of the stack in it. Pop the top of the stack. Make a recursive call to the function itself. Call the function to insert the elements at the bottom of the stack.
- Call the reverse function in the main(). Initialize a string.
- Traverse while the stack is not empty, create a variable p and store the top of the stack in it. Pop the top of the stack. Add the popped element in the string.
- Print the string.
C++ Program to Reverse a Stack Using Recursion
#include<bits/stdc++.h> using namespace std; stack<char> st; string s; char bottom_insert(char x){ if(st.size() == 0){ st.push(x); } else{ char a = st.top(); st.pop(); bottom_insert(x); st.push(a); } } char reverse(){ if(st.size()>0){ char x = st.top(); st.pop(); reverse(); bottom_insert(x); } } int main(){ st.push('1'); st.push('2'); st.push('3'); st.push('4'); st.push('5'); reverse(); while(!st.empty()){ char p=st.top(); st.pop(); s+=p; } cout<<"["; for(int i=s.size()-1; i>=0; i--){ cout<<s[i]<<", "; } cout<<"]"; return 0; }
[5, 4, 3, 2, 1]
Java Program to Reverse a Stack Using Recursion
import java.util.Stack; class ReverseStack{ static Stack<Character> st = new Stack<>(); static void bottom_insert(char x){ if(st.isEmpty()){ st.push(x); } else{ char a = st.peek(); st.pop(); bottom_insert(x); st.push(a); } } static void reverse(){ if(st.size() > 0){ char x = st.peek(); st.pop(); reverse(); bottom_insert(x); } } public static void main(String[] args){ st.push('1'); st.push('2'); st.push('3'); st.push('4'); st.push('5'); reverse(); System.out.print(st); } }
[5, 4, 3, 2, 1]
Complexity Analysis
Time Complexity: O(n*n) where n is the number of elements pushed in the stack.
Auxiliary Space: O(n*n) because we are using n*n extra stack space.