Reverse Stack

package com.thealgorithms.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);
    }

}
Algerlogo

Β© Alger 2022

About us

We are a group of programmers helping each other build new things, whether it be writing complex encryption programs, or simple ciphers. Our goal is to work together to document and model beautiful, helpful and interesting algorithms using code. We are an open-source community - anyone can contribute. We check each other's work, communicate and collaborate to solve problems. We strive to be welcoming, respectful, yet make sure that our code follows the latest programming guidelines.