Delete all even elements from a stack - GeeksforGeeks

18 Aug, 2021
Given a stack with n elements, the task is to remove all the elements of the stack without affecting the order of elements.Examples:  
Input : s = 16 <- 15 <- 29 <- 24 <- 19 (TOP) Output: 19 29 15 19 29 15 is the order of odd elements in which they will be popped from the given stack.Input : s = 1 <- 2 <- 3 <- 4 <- 5 (TOP) Output: 5 3 1  
 
Approach:  
Create a temporary stack temp and start popping the elements of the given stack s.For every popped element say val, if val % 2 == 1 then push it to temp.At the end of step 2, temp will contain all the odd elements from s but in reverse order.Now, to get the original order, pop every element from temp and push it to s.
Create a temporary stack temp and start popping the elements of the given stack s.
For every popped element say val, if val % 2 == 1 then push it to temp.
At the end of step 2, temp will contain all the odd elements from s but in reverse order.
Now, to get the original order, pop every element from temp and push it to s.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ implementation of the approach#include <stack>#include <iostream>#include <stdio.h> using namespace std; // Utility function to print// the contents of a stackstatic void printStack(stack<int> s){    while (!s.empty())    {        cout << s.top() << " ";        s.pop();    }} // Function to delete all even// elements from the stackstatic void deleteEven(stack<int> s){    stack<int> temp;    // While stack is not empty    while (!s.empty())    {        int val = s.top();        s.pop();         // If value is odd then push        // it to the temporary stack        if (val % 2 == 1)            temp.push(val);    }     // Transfer the contents of the temporary stack    // to the original stack in order to get    // the original order of the elements    while (!temp.empty())    {        s.push(temp.top());        temp.pop();    }     // Print the modified stack content    printStack(s);} // Driver Codeint main(){    stack<int> s;    s.push(16);    s.push(15);    s.push(29);    s.push(24);    s.push(19);    deleteEven(s);    return 0;}  // This code is contributed by Vivekkumar Singh
// Java implementation of the approachimport java.util.Stack;class GFG {     // Utility function to print    // the contents of a stack    static void printStack(Stack<Integer> stack)    {        while (!stack.isEmpty())            System.out.print(stack.pop() + " ");    }     // Function to delete all even    // elements from the stack    static void deleteEven(Stack<Integer> stack)    {        Stack<Integer> temp = new Stack<>();         // While stack is not empty        while (!stack.isEmpty()) {            int val = stack.pop();             // If value is odd then push            // it to the temporary stack            if (val % 2 == 1)                temp.push(val);        }         // Transfer the contents of the temporary stack        // to the original stack in order to get        // the original order of the elements        while (!temp.isEmpty())            stack.push(temp.pop());         // Print the modified stack content        printStack(stack);    }     // Driver code    public static void main(String[] args)    {        Stack<Integer> stack = new Stack<>();        stack.push(16);        stack.push(15);        stack.push(29);        stack.push(24);        stack.push(19);         deleteEven(stack);    }}
# Python implementation of the approach  # Utility function to print# the contents of a stackdef printStack(s):    while (len(s)!=0):        print(s.pop(),end=" ") # Function to delete all even# elements from the stackdef deleteEven(s):    temp = []         # While stack is not empty    while (len(s)!=0):        val=s.pop()                 # If value is odd then push        # it to the temporary stack        if (val % 2 == 1):            temp.append(val)         # Transfer the contents of the temporary stack    # to the original stack in order to get    # the original order of the elements    while (len(temp)!=0):        s.append(temp.pop())         # Print the modified stack content    printStack(s); # Driver Codes = []s.append(16)s.append(15)s.append(29)s.append(24)s.append(19)deleteEven(s) # This code is contributed by rag2127.
// C# implementation of the approachusing System;using System.Collections.Generic; class GFG{     // Utility function to print    // the contents of a stack    static void printStack(Stack<int> stack)    {        while (stack.Count != 0)            Console.Write(stack.Pop() + " ");    }     // Function to delete all even    // elements from the stack    static void deleteEven(Stack<int> stack)    {        Stack<int> temp = new Stack<int>();         // While stack is not empty        while (stack.Count != 0)        {            int val = stack.Pop();             // If value is odd then push            // it to the temporary stack            if (val % 2 == 1)                temp.Push(val);        }         // Transfer the contents of the temporary stack        // to the original stack in order to get        // the original order of the elements        while (temp.Count != 0)            stack.Push(temp.Pop());         // Print the modified stack content        printStack(stack);    }     // Driver code    public static void Main(String[] args)    {        Stack<int> stack = new Stack<int>();        stack.Push(16);        stack.Push(15);        stack.Push(29);        stack.Push(24);        stack.Push(19);         deleteEven(stack);    }} // This code has been contributed by 29AjayKumar
<script> // JavaScript implementation of the approach // Utility function to print// the contents of a stackfunction printStack(s){    while (s.length!=0)    {        document.write( s[s.length-1] + " ");        s.pop();    }} // Function to delete all even// elements from the stackfunction deleteEven(s){    var temp = [];    // While stack is not empty    while (s.length!=0)    {        var val = s[s.length-1];        s.pop();         // If value is odd then push        // it to the temporary stack        if (val % 2 == 1)            temp.push(val);    }     // Transfer the contents of the temporary stack    // to the original stack in order to get    // the original order of the elements    while (temp.length!=0)    {        s.push(temp[temp.length-1]);        temp.pop();    }     // Print the modified stack content    printStack(s);} // Driver Codevar s = [];s.push(16);s.push(15);s.push(29);s.push(24);s.push(19);deleteEven(s);  </script>
19 29 15
 
Time Complexity: O(N)Auxiliary Space: O(N) 
Vivekkumar Singh
29AjayKumar
sumitgumber28
itsok
pankajsharmagfg
rag2127
surinderdawra388
Data Structures
Stack
Data Structures
Stack
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
How to Start Learning DSA?
Introduction to Tree Data Structure
Program to implement Singly Linked List in C++ using class
Hash Functions and list/types of Hash functions
What Should I Learn First: Data Structures or Algorithms?
Stack Data Structure (Introduction and Program)
Stack Class in Java
Stack in Python
Check for Balanced Brackets in an expression (well-formedness) using Stack
Stack | Set 2 (Infix to Postfix)