C Program to Reverse a Stack using Recursion Last Updated : 26 Oct, 2022 Comments Improve Suggest changes Like Article Like Report Write a program to reverse a stack using recursion, without using any loop. Example: Input: elements present in stack from top to bottom 1 2 3 4 Output: 4 3 2 1 Input: elements present in stack from top to bottom 1 2 3Output: 3 2 1 Recommended PracticeReverse a StackTry It!Reverse a stack using Recursion The idea of the solution is to hold all values in Function Call Stack until the stack becomes empty. When the stack becomes empty, insert all held items one by one at the bottom of the stack. Illustration: Below is the illustration of the above approach Let given stack be 1 2 3 4 After all calls of reverse, 4 will be passed to function insert at bottom, after that 4 will pushed to the stack when stack is empty 4 Then 3 will be passed to function insert at bottom , it will check if the stack is empty or not if not then pop all the elements back and insert 3 and then push other elements back. 4 3Then 2 will be passed to function insert at bottom , it will check if the stack is empty or not if not then pop all the elements back and insert 2 and then push other elements back. 4 3 2Then 1 will be passed to function insert at bottom , it will check if the stack is empty or not if not then pop all the elements back and insert 1 and then push other elements back. 4 3 2 1 Follow the steps mentioned below to implement the idea: Create a stack and push all the elements in it.Call reverse(), which will pop all the elements from the stack and pass the popped element to function insert_at_bottom()Whenever insert_at_bottom() is called it will insert the passed element at the bottom of the stack.Print the stack Below is the implementation of the above approach: C // C program to reverse a // stack using recursion #include <stdio.h> #include <stdlib.h> #define bool int // structure of a stack node struct sNode { char data; struct sNode* next; }; // Function Prototypes void push(struct sNode** top_ref, int new_data); int pop(struct sNode** top_ref); bool isEmpty(struct sNode* top); void print(struct sNode* top); // Below is a recursive function // that inserts an element // at the bottom of a stack. void insertAtBottom(struct sNode** top_ref, int item) { if (isEmpty(*top_ref)) push(top_ref, item); else { // Hold all items in Function Call // Stack until we reach end of the // stack. When the stack becomes // empty, the isEmpty(*top_ref)becomes // true, the above if part is executed // and the item is inserted at the bottom int temp = pop(top_ref); insertAtBottom(top_ref, item); // Once the item is inserted // at the bottom, push all // the items held in Function // Call Stack push(top_ref, temp); } } // Below is the function that // reverses the given stack using // insertAtBottom() void reverse(struct sNode** top_ref) { if (!isEmpty(*top_ref)) { // Hold all items in Function // Call Stack until we // reach end of the stack int temp = pop(top_ref); reverse(top_ref); // Insert all the items (held in // Function Call Stack) // one by one from the bottom // to top. Every item is // inserted at the bottom insertAtBottom(top_ref, temp); } } // Driver Code int main() { struct sNode* s = NULL; push(&s, 4); push(&s, 3); push(&s, 2); push(&s, 1); printf(" Original Stack "); print(s); reverse(&s); printf(" Reversed Stack "); print(s); return 0; } // Function to check if // the stack is empty bool isEmpty(struct sNode* top) { return (top == NULL) ? 1 : 0; } // Function to push an item to stack void push(struct sNode** top_ref, int new_data) { // allocate node struct sNode* new_node = (struct sNode*)malloc(sizeof(struct sNode)); if (new_node == NULL) { printf("Stack overflow "); exit(0); } // put in the data new_node->data = new_data; // link the old list // off the new node new_node->next = (*top_ref); // move the head to // point to the new node (*top_ref) = new_node; } // Function to pop an item from stack int pop(struct sNode** top_ref) { char res; struct sNode* top; // If stack is empty then error if (*top_ref == NULL) { printf("Stack overflow "); exit(0); } else { top = *top_ref; res = top->data; *top_ref = top->next; free(top); return res; } } // Function to print a // linked list void print(struct sNode* top) { printf(" "); while (top != NULL) { printf(" %d ", top->data); top = top->next; } } OutputOriginal Stack 1 2 3 4 Reversed Stack 1 2 3 4 Time Complexity: O(N2). Auxiliary Space: O(N) use of Stack Comment More infoAdvertise with us Next Article C Program to Reverse a Stack using Recursion kartik Follow Improve Article Tags : Stack Recursion C Programs C Language DSA C Misc Programs +2 More Practice Tags : RecursionStack Similar Reads C Program to Reverse a String Using Recursion Reversing a string means changing the order of characters in the string so that the last character becomes the first character of the string. In this article, we will learn how to reverse a string using recursion in a C program.The string can be reversed by using two pointers: one at the start and o 1 min read C Program to reverse the digits of a number using recursion Given an integer N, the task is to reverse the digits of given integer using recursion. Examples: Input: N = 123Output: 321Explanation:The reverse of the given number is 321. Input: N = 12532Output: 23521Explanation:The reverse of the given number is 23521. Approach: Follow the steps below to solve 2 min read How to Reverse a String in C? In C, a string is a sequence of characters terminated by a null character (\0). Reversing a string means changing the order of the characters such that the characters at the end of the string come at the start and vice versa. In this article, we will learn how to reverse a string in C. Example: Inpu 2 min read Reverse String in C In C, reversing a string means rearranging the characters such that the last character becomes the first, the second-to-last character becomes the second, and so on. In this article, we will learn how to reverse string in C.The most straightforward method to reverse string is by using two pointers t 3 min read C Program to Traverse an Array in Reverse Write a C program to traverse a given array in reverse order that contains N elements.ExamplesInput: arr[] = {2, -1, 5, 6, 0, -3}Output: -3 0 6 5 -1 2Input: arr[] = {4, 0, -2, -9, -7, 1}Output: 1 -7 -9 -2 0 4Different Ways to Traverse an Array in Reverse Order in CWe can traverse/print the array in 2 min read Zig Zag Level order traversal of a tree using single array Write a function to print spiral order traversal of a tree. For below tree, function should print 1, 2, 3, 4, 5, 6, 7. We have discussed naive approach and two stack based approach in Level Order with recursion and multiple stacksThe idea behind this approach is first we have to take a queue, a dire 9 min read Reverse Array in C Reversing an array means the swapping last element and first element, second last element and second element, and so on. In this article, we will learn how to reverse an array in C.The simplest method to reverse an array in C program is by using two pointers: one starting at the beginning (left) and 3 min read C Program For Reversing A Doubly Linked List Given a Doubly Linked List, the task is to reverse the given Doubly Linked List. See below diagrams for example. (a) Original Doubly Linked List (b) Reversed Doubly Linked List Here is a simple method for reversing a Doubly Linked List. All we need to do is swap prev and next pointers for all nodes, 3 min read Reverse Number Program in C The reverse of a number of means reversing the order of digits of a number. In this article, we will learn how to reverse the digits of a number in C language. Example:Input: 12354Output: 45321Explanation: The number 12354 when reversed gives 45321Input: 623Output: 326Explanation: The number 623 whe 2 min read C program to reverse the content of the file and print it Given a text file in a directory, the task is to print the file content backward i.e., the last line should get printed first, 2nd last line should be printed second, and so on.Examples: Input: file1.txt has: Welcome to GeeksforGeeks Output: GeeksforGeeks to WelcomeGeeksforGeeks Input: file1.txt has 3 min read Like