Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions DataStructures/Stacks/ReverseStack.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package DataStructures.Stacks;

import java.util.Scanner;
import java.util.Stack;

/**
* Reversal of a stack using recursion.
*
* @author Ishika Agarwal, 2021
*/

public class ReverseStack {

public static void main(String args[]){

Scanner sc = new Scanner(System.in);
System.out.println("Enter the number of elements you wish to insert in the stack");
int n = sc.nextInt();
int i;
Stack<Integer> stack = new Stack<Integer>();
System.out.println("Enter the stack elements");
for(i = 0; i < n ; i++)
stack.push(sc.nextInt());
sc.close();
reverseStack(stack);
System.out.println("The reversed stack is:");
while(!stack.isEmpty()){
System.out.print(stack.peek()+",");
stack.pop();
}

}

private static void reverseStack(Stack<Integer> stack) {
if(stack.isEmpty()){
return;
}

//Store the topmost element
int element = stack.peek();
//Remove the topmost element
stack.pop();

//Reverse the stack for the leftover elements
reverseStack(stack);

//Insert the topmost element to the bottom of the stack
insertAtBottom(stack,element);

}

private static void insertAtBottom(Stack<Integer> stack, int element) {

if(stack.isEmpty()){
//When stack is empty, insert the element so it will be present at the bottom of the stack
stack.push(element);
return;
}

int ele = stack.peek();
/*Keep popping elements till stack becomes empty. Push the elements once the topmost element has
moved to the bottom of the stack.
*/
stack.pop();
insertAtBottom(stack, element);

stack.push(ele);
}

}