diff --git a/Misc/ReverseStackUsingRecursion.java b/Misc/ReverseStackUsingRecursion.java new file mode 100644 index 000000000000..bb9f606a3ab9 --- /dev/null +++ b/Misc/ReverseStackUsingRecursion.java @@ -0,0 +1,74 @@ +/* Program to reverse a Stack using Recursion*/ + + +import java.util.Stack; + +public class ReverseStackUsingRecursion { + + //Stack + private static Stack stack=new Stack<>(); + + //Main function + public static void main(String[] args) { + //To Create a Dummy Stack containing integers from 0-9 + for(int i=0;i<10;i++) + { + stack.push(i); + } + System.out.println("STACK"); + + //To print that dummy Stack + for(int k=9;k>=0;k--) + { + System.out.println(k); + } + + //Reverse Function called + reverseUsingRecursion(stack); + + System.out.println("REVERSED STACK : "); + //To print reversed stack + while (!stack.isEmpty()) + { + System.out.println(stack.pop()); + } + + + } + + //Function Used to reverse Stack Using Recursion + private static void reverseUsingRecursion(Stack stack) { + if(stack.isEmpty()) // If stack is empty then return + { + return; + } + /* All items are stored in call stack until we reach the end*/ + + int temptop=stack.peek(); + stack.pop(); + reverseUsingRecursion(stack); //Recursion call + insertAtEnd(temptop); // Insert items held in call stack one by one into stack + } + + //Function used to insert element at the end of stack + private static void insertAtEnd(int temptop) { + if(stack.isEmpty()) + { + stack.push(temptop); // If stack is empty push the element + } + else { + int temp = stack.peek(); /* All the items are stored in call stack until we reach end*/ + stack.pop(); + + insertAtEnd(temptop); //Recursive call + + stack.push(temp); + } + + } + + + + + +}