Delete all odd nodes of a Circular Linked List - GeeksforGeeks

07 Feb, 2022
Prerequisite: Delete all the even nodes of a Circular Linked ListGiven a circular singly linked list containing N nodes, the task is to delete all the odd nodes from the list. 
Examples: 
Input: 572->112->21->5->1->6 Output: 572 -> 112 -> 6 Explanation: All the odd valued nodes have been deletedInput: 9->11->32->6->13->20 Output: 32 -> 6 -> 20  
 
Approach: The idea is to traverse the nodes of the circular singly linked list one by one and get the pointer of the nodes having odd data. Delete those nodes by following the approach used in this post.Below is the implementation of the above idea: 
C++
Java
Python
C#
Javascript
// C++ program to delete all odd// node from a Circular singly linked list #include <bits/stdc++.h>using namespace std; // Structure for a nodestruct Node {    int data;    struct Node* next;}; // Function to insert a node at the beginning// of a Circular linked listvoid push(struct Node** head_ref, int data){    struct Node* ptr1 = (struct Node*)malloc(sizeof(struct Node));    struct Node* temp = *head_ref;    ptr1->data = data;    ptr1->next = *head_ref;     // If linked list is not NULL then    // set the next of last node    if (*head_ref != NULL) {        while (temp->next != *head_ref)            temp = temp->next;        temp->next = ptr1;    }    else        // For the first node        ptr1->next = ptr1;     *head_ref = ptr1;} // Delete the node if it is oddvoid deleteNode(Node* head_ref, Node* del){    struct Node* temp = head_ref;    // If node to be deleted is head node     if (head_ref == del)        head_ref = del->next;     // Traverse list till not found    // delete node    while (temp->next != del) {        temp = temp->next;    }     // Copy address of node    temp->next = del->next;     // Finally, free the memory occupied by del    free(del);    return;} // Function to delete all odd nodes// from the singly circular linked listvoid deleteoddNodes(Node* head){    struct Node* ptr = head;     struct Node* next;     // Traverse list till the end    // if the node is odd then delete it    do {        // if node is odd        if ((ptr->data % 2) == 1)             deleteNode(head, ptr);        // point to next node        next = ptr->next;        ptr = next;    } while (ptr != head);} // Function to print nodesvoid printList(struct Node* head){    struct Node* temp = head;    if (head != NULL) {        do {            printf("%d ", temp->data);            temp = temp->next;        } while (temp != head);    }} // Driver codeint main(){    // Initialize lists as empty    struct Node* head = NULL;     // Created linked list will be 56->61->57->11->12->2    push(&head, 2);    push(&head, 12);    push(&head, 11);    push(&head, 57);    push(&head, 61);    push(&head, 56);     cout << "\nList after deletion : ";    deleteoddNodes(head);    printList(head);     return 0;}
// Java program to delete all prime// node from a Circular singly linked listclass GFG {     // Structure for a node    static class Node {        int data;        Node next;    };     // Function to insert a node at the beginning    // of a Circular linked list    static Node push(Node head_ref, int data)    {        Node ptr1 = new Node();        Node temp = head_ref;        ptr1.data = data;        ptr1.next = head_ref;         // If linked list is not null then        // set the next of last node        if (head_ref != null) {            while (temp.next != head_ref)                temp = temp.next;            temp.next = ptr1;            return head_ref;        }        else// For the first node            ptr1.next = ptr1;         head_ref = ptr1;        return head_ref;    }     // Delete the node if it is odd    static Node deleteNode(Node head_ref, Node del)    {        Node temp = head_ref;        // If node to be deleted is head node         if (head_ref == del)            head_ref = del.next;         // Traverse list till not found        // delete node        while (temp.next != del) {            temp = temp.next;        }         // Copy address of node        temp.next = del.next;         return head_ref;    }     // Function to delete all odd nodes    // from the singly circular linked list    static Node deleteoddNodes(Node head)    {        Node ptr = head;         Node next;         // Traverse list till the end        // if the node is odd then delete it        do {            // If node is odd            if (ptr.data % 2 == 1)                deleteNode(head, ptr);             // point to next node            next = ptr.next;            ptr = next;        } while (ptr != head);        return head;    }     // Function to print nodes    static void printList(Node head)    {        Node temp = head;        if (head != null) {            do {                System.out.printf("%d ", temp.data);                temp = temp.next;            } while (temp != head);        }    }     // Driver code    public static void main(String args[])    {        // Initialize lists as empty        Node head = null;         // Created linked list will be 56->61->57->11->12->2        head = push(head, 2);        head = push(head, 12);        head = push(head, 11);        head = push(head, 57);        head = push(head, 61);        head = push(head, 56);         System.out.println("\nList after deletion : ");        head = deleteoddNodes(head);        printList(head);    }}
# Python3 program to delete all odd# node from a Circular singly linked listimport math   # Structure for a nodeclass Node:     def __init__(self, data):         self.data = data         self.next = None   # Function to insert a node at the beginning# of a Circular linked listdef push(head_ref, data):    ptr1 = Node(data)    temp = head_ref    ptr1.data = data    ptr1.next = head_ref       # If linked list is not None then    # set the next of last node    if (head_ref != None):        while (temp.next != head_ref):            temp = temp.next        temp.next = ptr1               else:        ptr1.next = ptr1 # For the first node       head_ref = ptr1    return head_ref   # Delete the node if it is odddef deleteNode(head_ref, delete):    temp = head_ref           # If node to be deleted is head node    if (head_ref == delete):        head_ref = delete.next       # Traverse list till not found    # delete node    while (temp.next != delete):        temp = temp.next           # Copy address of node    temp.next = delete.next          # Function to delete all odd nodes# from the singly circular linked listdef deleteoddNodes(head):    ptr = head    next = None       # Traverse list till the end    # if the node is odd then delete it    # if node is odd    next = ptr.next    ptr = next    while (ptr != head):        if (ptr.data % 2 == 1):            deleteNode(head, ptr)           # point to next node        next = ptr.next        ptr = next    return head   # Function to print nodesdef printList(head):    temp = head    if (head != None):        print(temp.data, end = " ")        temp = temp.next        while (temp != head):            print(temp.data, end = " ")            temp = temp.next           # Driver codeif __name__=='__main__':            # Initialize lists as empty    head = None       # Created linked list will be 56->61->57->11->12->2     head = push(head, 2)     head = push(head, 12)    head = push(head, 11)     head = push(head, 57)     head = push(head, 61)     head = push(head, 56)       print("List after deletion : ", end = "")    head = deleteoddNodes(head)    printList(head)
// C# program to delete all prime// node from a Circular singly linked listusing System; class GFG {     // Structure for a node    public class Node {        public int data;        public Node next;    };     // Function to insert a node at the beginning    // of a Circular linked list    static Node push(Node head_ref, int data)    {        Node ptr1 = new Node();        Node temp = head_ref;        ptr1.data = data;        ptr1.next = head_ref;         // If linked list is not null then        // set the next of last node        if (head_ref != null) {            while (temp.next != head_ref)                temp = temp.next;            temp.next = ptr1;            return head_ref;        }        else            // For the first node            ptr1.next = ptr1;         head_ref = ptr1;        return head_ref;    }     // Delete the node if it is odd    static Node deleteNode(Node head_ref, Node del)    {        Node temp = head_ref;         // If node to be deleted is head node        if (head_ref == del)            head_ref = del.next;         // Traverse list till not found        // delete node        while (temp.next != del) {            temp = temp.next;        }         // copy address of node        temp.next = del.next;         return head_ref;    }     // Function to delete all odd nodes    // from the singly circular linked list    static Node deleteoddNodes(Node head)    {        Node ptr = head;         Node next;         // Traverse list till the end        // if the node is odd then delete it        do {            // If node is odd            if (ptr.data % 2 == 1)                deleteNode(head, ptr);             // Point to next node            next = ptr.next;            ptr = next;        } while (ptr != head);        return head;    }     // Function to print nodes    static void printList(Node head)    {        Node temp = head;        if (head != null) {            do {                Console.Write("{0} ", temp.data);                temp = temp.next;            } while (temp != head);        }    }     // Driver code    public static void Main(String[] args)    {        // Initialize lists as empty        Node head = null;         // Created linked list will be 56->61->57->11->12->2        head = push(head, 2);        head = push(head, 12);        head = push(head, 11);        head = push(head, 57);        head = push(head, 61);        head = push(head, 56);         Console.WriteLine("\nList after deletion : ");        head = deleteoddNodes(head);        printList(head);    }}
<script> // JavaScript program to delete all prime// node from a Circular singly linked list // Structure for a nodeclass Node {     constructor()    {        this.data = 0;        this.next = null;    }}; // Function to insert a node at the beginning// of a Circular linked listfunction push(head_ref, data){    var ptr1 = new Node();    var temp = head_ref;    ptr1.data = data;    ptr1.next = head_ref;    // If linked list is not null then    // set the next of last node    if (head_ref != null) {        while (temp.next != head_ref)            temp = temp.next;        temp.next = ptr1;        return head_ref;    }    else        // For the first node        ptr1.next = ptr1;    head_ref = ptr1;    return head_ref;} // Delete the node if it is oddfunction deleteNode(head_ref, del){    var temp = head_ref;    // If node to be deleted is head node    if (head_ref == del)        head_ref = del.next;    // Traverse list till not found    // delete node    while (temp.next != del) {        temp = temp.next;    }    // copy address of node    temp.next = del.next;    return head_ref;} // Function to delete all odd nodes// from the singly circular linked listfunction deleteoddNodes(head){    var ptr = head;    var next;    // Traverse list till the end    // if the node is odd then delete it    do {        // If node is odd        if (ptr.data % 2 == 1)            deleteNode(head, ptr);        // Point to next node        next = ptr.next;        ptr = next;    } while (ptr != head);    return head;} // Function to print nodesfunction printList(head){    var temp = head;    if (head != null) {        do {            document.write(temp.data+ " ");            temp = temp.next;        } while (temp != head);    }} // Driver code// Initialize lists as emptyvar head = null;// Created linked list will be 56->61->57->11->12->2head = push(head, 2);head = push(head, 12);head = push(head, 11);head = push(head, 57);head = push(head, 61);head = push(head, 56);document.write("List after deletion : ");head = deleteoddNodes(head);printList(head);  </script>
List after deletion : 56 12 2
 
sumitgumber28
itsok
simmytarika5
surinderdawra388
circular linked list
Linked List
Linked List
circular linked list
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Delete a Linked List node at a given position
Queue - Linked List Implementation
Implementing a Linked List in Java using Class
Circular Linked List | Set 1 (Introduction and Applications)
Merge Sort for Linked Lists
Remove duplicates from a sorted linked list
Function to check if a singly linked list is palindrome
Detect and Remove Loop in a Linked List
Find Length of a Linked List (Iterative and Recursive)
Top 20 Linked List Interview Question