Deletion at different positions in a Circular Linked List

29 Jun, 2022
Given a Circular Linked List. The task is to write programs to delete nodes from this list present at: 
First position.
Last Position.
At any given position .
Examples:  
Input : 99->11->22->33->44->55->66
Output : 11->22->33->44->55->66

Input : 11->22->33->44->55->66
Output : 22->33->44->55->66
Deleting First Node from Circular Linked List
Approach: 
Take two pointers current and previous and traverse the list.Keep the pointer current fixed pointing to the first node and move previous until it reaches the last node.Once, the pointer previous reaches the last node, do the following: previous->next = current-> nexthead = previous -> next;
Take two pointers current and previous and traverse the list.
Keep the pointer current fixed pointing to the first node and move previous until it reaches the last node.
Once, the pointer previous reaches the last node, do the following: previous->next = current-> nexthead = previous -> next;
previous->next = current-> next
head = previous -> next;
Function to delete first node from singly circular linked list:  
C
Java
Python3
C#
Javascript
// Function to delete First node of// Circular Linked Listvoid DeleteFirst(struct Node** head){    struct Node *previous = *head, *firstNode = *head;     // check if list doesn't have any node    // if not then return    if (*head == NULL) {        printf("\nList is empty\n");        return;    }     // check if list have single node    // if yes then delete it and return    if (previous->next == previous) {        *head = NULL;        return;    }     // traverse second node to first    while (previous->next != *head) {         previous = previous->next;    }     // now previous is last node and    // first node(firstNode) link address    // put in last node(previous) link    previous->next = firstNode->next;     // make second node as head node    *head = previous->next;    free(firstNode);    return;}
// Function to delete First node of// Circular Linked Liststatic void DeleteFirst(Node head){    Node previous = head, firstNode = head;     // Check if list doesn't have any node    // if not then return    if (head == null)    {        System.out.printf("\nList is empty\n");        return;    }     // Check if list have single node    // if yes then delete it and return    if (previous.next == previous)    {        head = null;        return;    }     // Traverse second node to first    while (previous.next != head)    {        previous = previous.next;    }     // Now previous is last node and    // first node(firstNode) link address    // put in last node(previous) link    previous.next = firstNode.next;     // Make second node as head node    head = previous.next;    System.gc();    return;} // This code is contributed by aashish1995
# Function delete First node of# Circular Linked Listdef DeleteFirst(head):    previous = head    next = head     # check list have any node    # if not then return    if (head == None) :             print("\nList is empty")        return None         # check list have single node    # if yes then delete it and return    if (previous.next == previous) :             head = None        return None         # traverse second to first    while (previous.next != head):        previous = previous.next        next = previous.next         # now previous is last node and    # next is first node of list    # first node(next) link address    # put in last node(previous) link    previous.next = next.next     # make second node as head node    head = previous.next     return head   # This code is contributed by shivanisinghss2110
using System; public class GFG{     static public// Function delete First node of// Circular Linked Liststatic Node DeleteFirst(Node head){    Node previous = head, next = head;     // check list have any node    // if not then return    if (head == null)    {        Console.Write("\nList is empty\n");        return null;    }     // Check if list have single node    // if yes then delete it and return    if (previous.next == previous)    {        head = null;        return null;    }     // Traverse second node to first    while (previous.next != head)    {        previous = previous.next;        next = previous.next;    }     // Now previous is last node and    // first node(firstNode) link address    // put in last node(previous) link    previous.next = next.next;     // Make second node as head node    head = previous.next;     return head;}// This code is contributed by shivanisinghss2110.c void Main (){         // Code    }
<script> function  DeleteFirst(head){    previous = head, firstNode = head;      // Check if list doesn't have any node    // if not then return    if (head == null)    {        document.write("<br>List is empty<br>");        return;    }      // Check if list have single node    // if yes then delete it and return    if (previous.next == previous)    {        head = null;        return;    }      // Traverse second node to first    while (previous.next != head)    {        previous = previous.next;    }      // Now previous is last node and    // first node(firstNode) link address    // put in last node(previous) link    previous.next = firstNode.next;      // Make second node as head node    head = previous.next;         return;} // This code is contributed by rag2127</script>
Examples: 
Input : 99->11->22->33->44->55->66
Output : 99->11->22->33->44->55

Input : 99->11->22->33->44->55
Output : 99->11->22->33->44
Delete last node from Circular Linked List
Approach: 
Take two pointers current and previous and traverse the list.Move both pointers such that next of previous is always pointing to current. Keep moving the pointers current and previous until current reaches the last node and previous is at the second last node.Once, the pointer current reaches the last node, do the following: previous->next = current-> nexthead = previous -> next;
Take two pointers current and previous and traverse the list.
Move both pointers such that next of previous is always pointing to current. Keep moving the pointers current and previous until current reaches the last node and previous is at the second last node.
Once, the pointer current reaches the last node, do the following: previous->next = current-> nexthead = previous -> next;
previous->next = current-> next
head = previous -> next;
Function to delete last node from the list: 
C
Java
Python3
C#
Javascript
// Function delete last node of// Circular Linked Listvoid DeleteLast(struct Node** head){    struct Node *current = *head, *temp = *head, *previous;     // check if list doesn't have any node    // if not then return    if (*head == NULL) {        printf("\nList is empty\n");        return;    }     // check if list have single node    // if yes then delete it and return    if (current->next == current) {        *head = NULL;        return;    }     // move first node to last    // previous    while (current->next != *head) {        previous = current;        current = current->next;    }     previous->next = current->next;    *head = previous->next;    free(current);    return;}
// Function to delete last node of// Circular Linked Liststatic Node DeleteLast(Node head){    Node current = head, temp = head, previous = null;      // Check if list doesn't have any node    // if not then return    if (head == null)    {        System.out.printf("\nList is empty\n");        return null;    }      // Check if list have single node    // if yes then delete it and return    if (current.next == current)    {        head = null;        return null;    }      // Move first node to last    // previous    while (current.next != head)    {        previous = current;        current = current.next;    }      previous.next = current.next;    head = previous.next;          return head;} // This code is contributed by pratham76
# Function to delete last node of# Circular Linked Listdef DeleteLast(head):    current = head    temp = head    previous = None     # check if list doesn't have any node    # if not then return    if (head == None):        print("\nList is empty")        return None     # check if list have single node    # if yes then delete it and return    if (current.next == current):        head = None        return None     # move first node to last    # previous    while (current.next != head):        previous = current        current = current.next     previous.next = current.next    head = previous.next     return head   # This code is contributed by rutvik_56
// Function to delete last node of// Circular Linked Liststatic Node DeleteLast(Node head){    Node current = head, temp = head, previous = null;     // check if list doesn't have any node    // if not then return    if (head == null)    {        Console.Write("\nList is empty\n");        return null;    }     // check if list have single node    // if yes then delete it and return    if (current.next == current)    {        head = null;        return null;    }     // move first node to last    // previous    while (current.next != head)    {        previous = current;        current = current.next;    }     previous.next = current.next;    head = previous.next;         return head;} // This code is contributed by shivanisinghss2110
<script> function DeleteLast(head){    let current = head, temp = head, previous = null;       // Check if list doesn't have any node    // if not then return    if (head == null)    {        document.write("<br>List is empty<br>");        return null;    }       // Check if list have single node    // if yes then delete it and return    if (current.next == current)    {        head = null;        return null;    }       // Move first node to last    // previous    while (current.next != head)    {        previous = current;        current = current.next;    }       previous.next = current.next;    head = previous.next;           return head;} // This code is contributed by avanitrachhadiya2155 </script>
Examples: 
Input : 99->11->22->33->44->55->66
        Index= 4
Output : 99->11->22->33->55->66

Input : 99->11->22->33->44->55->66
        Index= 2
Output : 99->11->33->44->55->66
Note: 0-based indexing is considered for the list.
Approach: 
First, find the length of the list. That is, the number of nodes in the list.Take two pointers previous and current to traverse the list. Such that previous is one position behind the current node.Take a variable count initialized to 0 to keep track of the number of nodes traversed.Traverse the list until the given index is reached.Once the given index is reached, do previous->next = current->next.
First, find the length of the list. That is, the number of nodes in the list.
Take two pointers previous and current to traverse the list. Such that previous is one position behind the current node.
Take a variable count initialized to 0 to keep track of the number of nodes traversed.
Traverse the list until the given index is reached.
Once the given index is reached, do previous->next = current->next.
Function to delete a node at given index or location from singly circular linked list: 
C
Java
Python3
Javascript
// Function to delete node at given index// of Circular Linked Listvoid DeleteAtPosition(struct Node** head, int index){    // find length of list    int len = Length(*head);    int count = 1;    struct Node *previous = *head, *next = *head;     // check if list doesn't have any node    // if not then return    if (*head == NULL) {        printf("\nDelete Last List is empty\n");        return;    }     // given index is in list or not    if (index >= len || index < 0) {        printf("\nIndex is not Found\n");        return;    }     // delete first node    if (index == 0) {        DeleteFirst(head);        return;    }     // traverse first to last node    while (len > 0) {         // if index found delete that node        if (index == count) {            previous->next = next->next;            free(next);            return;        }        previous = previous->next;        next = previous->next;        len--;        count++;    }     return;}
// Java program to delete node at different // Function delete node at a given position// of Circular Linked Liststatic Node DeleteAtPosition( Node head, int index){    // Find length of list    int len = Length(head);    int count = 1;    Node previous = head, next = head;     // check list have any node    // if not then return    if (head == null)    {        System.out.printf("\nDelete Last List is empty\n");        return null;    }     // given index is in list or not    if (index >= len || index < 0)    {        System.out.printf("\nIndex is not Found\n");        return null;    }     // delete first node    if (index == 0)    {        head = DeleteFirst(head);        return head;    }     // traverse first to last node    while (len > 0)    {         // if index found delete that node        if (index == count)        {            previous.next = next.next;                         return head;        }        previous = previous.next;        next = previous.next;        len--;        count++;    }    return head;} // This code is contributed by shivanisinghss2110
# Function delete node at a given position# of Circular Linked Listdef DeleteAtPosition(head, index):     # Find length of list    len = Length(head)    count = 1    previous = head    next = head     # check list have any node    # if not then return    if (head == None):        print("\nDelete Last List is empty")        return None         # given index is in list or not    if (index >= len or index < 0) :        print("\nIndex is not Found")        return None     # delete first node    if (index == 0) :        head = DeleteFirst(head)        return head     # traverse first to last node    while (len > 0):             # if index found delete that node        if (index == count):            previous.next = next.next                         return head                 previous = previous.next        next = previous.next        len = len - 1        count = count + 1         return head   # This code is contributed by shivanisinghss2110
<script> // Function delete node at a given position// of Circular Linked Listfunction DeleteAtPosition(head, index){     // Find length of list    let len = head.length    let count = 1    let previous = head    let next = head     // check list have any node    // if not then return    if (head == null){        document.write("</br>","Delete Last List is empty")        return null    }         // given index is in list or not    if (index >= len || index < 0){        document.write("</br>","Index is not Found")        return null    }     // delete first node    if (index == 0){        head = DeleteFirst(head)        return head    }     // traverse first to last node    while (len > 0){             // if index found delete that node        if (index == count){            previous.next = next.next                         return head        }                 previous = previous.next        next = previous.next        len = len - 1        count = count + 1    }         return head}  // This code is contributed by shinjanpatra </script>
C++
Java
Python3
C#
Javascript
// C++ program to delete node at different// positions from a circular 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 end of// a Circular linked listvoid Insert(struct Node** head, int data){    struct Node* current = *head;    // Create a new node    struct Node* newNode = new Node;     // check node is created or not    if (!newNode) {        printf("\nMemory Error\n");        return;    }     // insert data into newly created node    newNode->data = data;     // check list is empty    // if not have any node then    // make first node it    if (*head == NULL) {        newNode->next = newNode;        *head = newNode;        return;    }     // if list have already some node    else {         // move first node to last node        while (current->next != *head) {            current = current->next;        }         // put first or head node address        // in new node link        newNode->next = *head;         // put new node address into last        // node link(next)        current->next = newNode;    }} // Function print data of listvoid Display(struct Node* head){    struct Node* current = head;     // if list is empty, simply show message    if (head == NULL) {        printf("\nDisplay List is empty\n");        return;    }     // traverse first to last node    else {        do {            printf("%d ", current->data);            current = current->next;        } while (current != head);    }} // Function return number of nodes present in listint Length(struct Node* head){    struct Node* current = head;    int count = 0;     // if list is empty simply return length zero    if (head == NULL) {        return 0;    }     // traverse first to last node    else {        do {            current = current->next;            count++;        } while (current != head);    }    return count;} // Function delete First node of Circular Linked Listvoid DeleteFirst(struct Node** head){    struct Node *previous = *head, *next = *head;     // check list have any node    // if not then return    if (*head == NULL) {        printf("\nList is empty\n");        return;    }     // check list have single node    // if yes then delete it and return    if (previous->next == previous) {        *head = NULL;        return;    }     // traverse second to first    while (previous->next != *head) {         previous = previous->next;        next = previous->next;    }     // now previous is last node and    // next is first node of list    // first node(next) link address    // put in last node(previous) link    previous->next = next->next;     // make second node as head node    *head = previous->next;    free(next);     return;} // Function to delete last node of// Circular Linked Listvoid DeleteLast(struct Node** head){    struct Node *current = *head, *temp = *head, *previous;     // check if list doesn't have any node    // if not then return    if (*head == NULL) {        printf("\nList is empty\n");        return;    }     // check if list have single node    // if yes then delete it and return    if (current->next == current) {        *head = NULL;        return;    }     // move first node to last    // previous    while (current->next != *head) {        previous = current;        current = current->next;    }     previous->next = current->next;    *head = previous->next;    free(current);     return;} // Function delete node at a given position// of Circular Linked Listvoid DeleteAtPosition(struct Node** head, int index){    // Find length of list    int len = Length(*head);    int count = 1;    struct Node *previous = *head, *next = *head;     // check list have any node    // if not then return    if (*head == NULL) {        printf("\nDelete Last List is empty\n");        return;    }     // given index is in list or not    if (index >= len || index < 0) {        printf("\nIndex is not Found\n");        return;    }     // delete first node    if (index == 0) {        DeleteFirst(head);        return;    }     // traverse first to last node    while (len > 0) {         // if index found delete that node        if (index == count) {            previous->next = next->next;            free(next);            return;        }        previous = previous->next;        next = previous->next;        len--;        count++;    }    return;} // Driver Codeint main(){    struct Node* head = NULL;    Insert(&head, 99);    Insert(&head, 11);    Insert(&head, 22);    Insert(&head, 33);    Insert(&head, 44);    Insert(&head, 55);    Insert(&head, 66);     // Deleting Node at position    printf("Initial List: ");    Display(head);    printf("\nAfter Deleting node at index 4: ");    DeleteAtPosition(&head, 4);    Display(head);     // Deleting first Node    printf("\n\nInitial List: ");    Display(head);    printf("\nAfter Deleting first node: ");    DeleteFirst(&head);    Display(head);     // Deleting last Node    printf("\n\nInitial List: ");    Display(head);    printf("\nAfter Deleting last node: ");    DeleteLast(&head);    Display(head);     return 0;}
// Java program to delete node at different// positions from a circular linked listimport java.util.*;import java.lang.*;import java.io.*; class GFG{ // structure for a nodestatic class Node{    int data;    Node next;}; // Function to insert a node at the end of// a Circular linked liststatic Node Insert(Node head, int data){    Node current = head;         // Create a new node    Node newNode = new Node();     // check node is created or not    if (newNode == null)    {        System.out.printf("\nMemory Error\n");        return null;    }     // insert data into newly created node    newNode.data = data;     // check list is empty    // if not have any node then    // make first node it    if (head == null)    {        newNode.next = newNode;        head = newNode;        return head;    }     // if list have already some node    else    {         // move first node to last node        while (current.next != head)        {            current = current.next;        }         // put first or head node address        // in new node link        newNode.next = head;         // put new node address into last        // node link(next)        current.next = newNode;    }    return head;} // Function print data of liststatic void Display( Node head){    Node current = head;     // if list is empty, simply show message    if (head == null)    {        System.out.printf("\nDisplay List is empty\n");        return;    }     // traverse first to last node    else    {        do        {            System.out.printf("%d ", current.data);            current = current.next;        } while (current != head);    }} // Function return number of nodes present in liststatic int Length(Node head){    Node current = head;    int count = 0;     // if list is empty    // simply return length zero    if (head == null)    {        return 0;    }     // traverse first to last node    else    {        do        {            current = current.next;            count++;        } while (current != head);    }    return count;} // Function delete First node of// Circular Linked Liststatic Node DeleteFirst(Node head){    Node previous = head, next = head;     // check list have any node    // if not then return    if (head == null)    {        System.out.printf("\nList is empty\n");        return null;    }     // check list have single node    // if yes then delete it and return    if (previous.next == previous)    {        head = null;        return null;    }     // traverse second to first    while (previous.next != head)    {        previous = previous.next;        next = previous.next;    }     // now previous is last node and    // next is first node of list    // first node(next) link address    // put in last node(previous) link    previous.next = next.next;     // make second node as head node    head = previous.next;     return head;} // Function to delete last node of// Circular Linked Liststatic Node DeleteLast(Node head){    Node current = head, temp = head, previous=null;     // check if list doesn't have any node    // if not then return    if (head == null)    {        System.out.printf("\nList is empty\n");        return null;    }     // check if list have single node    // if yes then delete it and return    if (current.next == current)    {        head = null;        return null;    }     // move first node to last    // previous    while (current.next != head)    {        previous = current;        current = current.next;    }     previous.next = current.next;    head = previous.next;         return head;} // Function delete node at a given position// of Circular Linked Liststatic Node DeleteAtPosition( Node head, int index){    // Find length of list    int len = Length(head);    int count = 1;    Node previous = head, next = head;     // check list have any node    // if not then return    if (head == null)    {        System.out.printf("\nDelete Last List is empty\n");        return null;    }     // given index is in list or not    if (index >= len || index < 0)    {        System.out.printf("\nIndex is not Found\n");        return null;    }     // delete first node    if (index == 0)    {        head = DeleteFirst(head);        return head;    }     // traverse first to last node    while (len > 0)    {         // if index found delete that node        if (index == count)        {            previous.next = next.next;                         return head;        }        previous = previous.next;        next = previous.next;        len--;        count++;    }    return head;} // Driver Codepublic static void main(String args[]){    Node head = null;    head = Insert(head, 99);    head = Insert(head, 11);    head = Insert(head, 22);    head = Insert(head, 33);    head = Insert(head, 44);    head = Insert(head, 55);    head = Insert(head, 66);     // Deleting Node at position    System.out.printf("Initial List: ");    Display(head);    System.out.printf("\nAfter Deleting node at index 4: ");    head = DeleteAtPosition(head, 4);    Display(head);     // Deleting first Node    System.out.printf("\n\nInitial List: ");    Display(head);    System.out.printf("\nAfter Deleting first node: ");    head = DeleteFirst(head);    Display(head);     // Deleting last Node    System.out.printf("\n\nInitial List: ");    Display(head);    System.out.printf("\nAfter Deleting last node: ");    head = DeleteLast(head);    Display(head);}} // This code is contributed by Arnab Kundu
# Python3 program to delete node at different# positions from a circular linked list # A linked list nodeclass Node:    def __init__(self, new_data):        self.data = new_data        self.next = None        self.prev = None # Function to insert a node at the end of# a Circular linked listdef Insert(head, data):     current = head         # Create a new node    newNode = Node(0)     # check node is created or not    if (newNode == None):             print("\nMemory Error\n")        return None         # insert data into newly created node    newNode.data = data     # check list is empty    # if not have any node then    # make first node it    if (head == None) :        newNode.next = newNode        head = newNode        return head     # if list have already some node    else:             # move first node to last node        while (current.next != head):                     current = current.next                 # put first or head node address        # in new node link        newNode.next = head         # put new node address into last        # node link(next)        current.next = newNode         return head # Function print data of listdef Display(head):     current = head     # if list is empty, simply show message    if (head == None):             print("\nDisplay List is empty\n")        return         # traverse first to last node    else:             while(True):                     print( current.data,end=" ")            current = current.next            if (current == head):                break;     # Function return number of nodes present in listdef Length(head):    current = head    count = 0     # if list is empty    # simply return length zero    if (head == None):             return 0     # traverse first to last node    else:             while(True):                     current = current.next            count = count + 1            if (current == head):                break;         return count # Function delete First node of# Circular Linked Listdef DeleteFirst(head):    previous = head    next = head     # check list have any node    # if not then return    if (head == None) :             print("\nList is empty")        return None         # check list have single node    # if yes then delete it and return    if (previous.next == previous) :             head = None        return None         # traverse second to first    while (previous.next != head):        previous = previous.next        next = previous.next         # now previous is last node and    # next is first node of list    # first node(next) link address    # put in last node(previous) link    previous.next = next.next     # make second node as head node    head = previous.next     return head # Function to delete last node of# Circular Linked Listdef DeleteLast(head):    current = head    temp = head    previous = None     # check if list doesn't have any node    # if not then return    if (head == None):        print("\nList is empty")        return None     # check if list have single node    # if yes then delete it and return    if (current.next == current) :        head = None        return None     # move first node to last    # previous    while (current.next != head):        previous = current        current = current.next         previous.next = current.next    head = previous.next         return head # Function delete node at a given position# of Circular Linked Listdef DeleteAtPosition(head, index):     # Find length of list    len = Length(head)    count = 1    previous = head    next = head     # check list have any node    # if not then return    if (head == None):        print("\nDelete Last List is empty")        return None         # given index is in list or not    if (index >= len or index < 0) :        print("\nIndex is not Found")        return None     # delete first node    if (index == 0) :        head = DeleteFirst(head)        return head     # traverse first to last node    while (len > 0):             # if index found delete that node        if (index == count):            previous.next = next.next                         return head                 previous = previous.next        next = previous.next        len = len - 1        count = count + 1         return head # Driver Code head = Nonehead = Insert(head, 99)head = Insert(head, 11)head = Insert(head, 22)head = Insert(head, 33)head = Insert(head, 44)head = Insert(head, 55)head = Insert(head, 66) # Deleting Node at positionprint("Initial List: ")Display(head)print("\nAfter Deleting node at index 4: ")head = DeleteAtPosition(head, 4)Display(head) # Deleting first Nodeprint("\n\nInitial List: ")Display(head)print("\nAfter Deleting first node: ")head = DeleteFirst(head)Display(head) # Deleting last Nodeprint("\n\nInitial List: ")Display(head)print("\nAfter Deleting last node: ")head = DeleteLast(head)Display(head) # This code is contributed by Arnab Kundu
// C# program to delete node at different// positions from a circular linked listusing System; class GFG{ // structure for a nodeclass Node{    public int data;    public Node next;}; // Function to insert a node at the end of// a Circular linked liststatic Node Insert(Node head, int data){    Node current = head;         // Create a new node    Node newNode = new Node();     // check node is created or not    if (newNode == null)    {        Console.Write("\nMemory Error\n");        return null;    }     // insert data into newly created node    newNode.data = data;     // check list is empty    // if not have any node then    // make first node it    if (head == null)    {        newNode.next = newNode;        head = newNode;        return head;    }     // if list have already some node    else    {         // move first node to last node        while (current.next != head)        {            current = current.next;        }         // put first or head node address        // in new node link        newNode.next = head;         // put new node address into last        // node link(next)        current.next = newNode;    }    return head;} // Function print data of liststatic void Display( Node head){    Node current = head;     // if list is empty, simply show message    if (head == null)    {        Console.Write("\nDisplay List is empty\n");        return;    }     // traverse first to last node    else    {        do        {            Console.Write("{0} ", current.data);            current = current.next;        } while (current != head);    }} // Function return number of nodes present in liststatic int Length(Node head){    Node current = head;    int count = 0;     // if list is empty    // simply return length zero    if (head == null)    {        return 0;    }     // traverse first to last node    else    {        do        {            current = current.next;            count++;        } while (current != head);    }    return count;} // Function delete First node of// Circular Linked Liststatic Node DeleteFirst(Node head){    Node previous = head, next = head;     // check list have any node    // if not then return    if (head == null)    {        Console.Write("\nList is empty\n");        return null;    }     // check list have single node    // if yes then delete it and return    if (previous.next == previous)    {        head = null;        return null;    }     // traverse second to first    while (previous.next != head)    {        previous = previous.next;        next = previous.next;    }     // now previous is last node and    // next is first node of list    // first node(next) link address    // put in last node(previous) link    previous.next = next.next;     // make second node as head node    head = previous.next;     return head;} // Function to delete last node of// Circular Linked Liststatic Node DeleteLast(Node head){    Node current = head, temp = head, previous = null;     // check if list doesn't have any node    // if not then return    if (head == null)    {        Console.Write("\nList is empty\n");        return null;    }     // check if list have single node    // if yes then delete it and return    if (current.next == current)    {        head = null;        return null;    }     // move first node to last    // previous    while (current.next != head)    {        previous = current;        current = current.next;    }     previous.next = current.next;    head = previous.next;         return head;} // Function delete node at a given position// of Circular Linked Liststatic Node DeleteAtPosition( Node head, int index){    // Find length of list    int len = Length(head);    int count = 1;    Node previous = head, next = head;     // check list have any node    // if not then return    if (head == null)    {        Console.Write("\nDelete Last List is empty\n");        return null;    }     // given index is in list or not    if (index >= len || index < 0)    {        Console.Write("\nIndex is not Found\n");        return null;    }     // delete first node    if (index == 0)    {        head = DeleteFirst(head);        return head;    }     // traverse first to last node    while (len > 0)    {         // if index found delete that node        if (index == count)        {            previous.next = next.next;                         return head;        }        previous = previous.next;        next = previous.next;        len--;        count++;    }    return head;} // Driver Codepublic static void Main(String []args){    Node head = null;    head = Insert(head, 99);    head = Insert(head, 11);    head = Insert(head, 22);    head = Insert(head, 33);    head = Insert(head, 44);    head = Insert(head, 55);    head = Insert(head, 66);     // Deleting Node at position    Console.Write("Initial List: ");    Display(head);    Console.Write("\nAfter Deleting node at index 4: ");    head = DeleteAtPosition(head, 4);    Display(head);     // Deleting first Node    Console.Write("\n\nInitial List: ");    Display(head);    Console.Write("\nAfter Deleting first node: ");    head = DeleteFirst(head);    Display(head);     // Deleting last Node    Console.Write("\n\nInitial List: ");    Display(head);    Console.Write("\nAfter Deleting last node: ");    head = DeleteLast(head);    Display(head);}} // This code is contributed by Rajput-Ji
<script> // JavaScript program to delete node at different// positions from a circular linked list // A linked list nodeclass Node{    constructor(new_data){        this.data = new_data        this.next = null        this.prev = null    }} // Function to insert a node at the end of// a Circular linked listfunction Insert(head, data){     let current = head         // Create a new node    let newNode = new Node(0)     // check node is created or not    if (newNode == null){             document.write("</br>","Memory Error","</br>")        return null    }         // insert data into newly created node    newNode.data = data     // check list is empty    // if not have any node then    // make first node it    if (head == null){        newNode.next = newNode        head = newNode        return head    }     // if list have already some node    else{             // move first node to last node        while (current.next != head)                     current = current.next                 // put first or head node address        // in new node link        newNode.next = head         // put new node address into last        // node link(next)        current.next = newNode    }         return head} // Function document.write data of listfunction Display(head){     let current = head     // if list is empty, simply show message    if (head == null){             document.write("</br>","Display List is empty","</br>")        return    }         // traverse first to last node    else{             while(true){                     document.write( current.data," ")            current = current.next            if (current == head)                break;        }    }}     // Function return number of nodes present in listfunction Length(head){    let current = head    let count = 0     // if list is empty    // simply return length zero    if (head == null)             return 0     // traverse first to last node    else{             while(true){                     current = current.next            count = count + 1            if (current == head)                break;        }     }         return count} // Function delete First node of// Circular Linked Listfunction DeleteFirst(head){    let previous = head    let next = head     // check list have any node    // if not then return    if (head == null){             document.write("</br>","List is empty")        return null    }         // check list have single node    // if yes then delete it and return    if (previous.next == previous){             head = null        return null    }         // traverse second to first    while (previous.next != head){        previous = previous.next        next = previous.next    }         // now previous is last node and    // next is first node of list    // first node(next) link address    // put in last node(previous) link    previous.next = next.next     // make second node as head node    head = previous.next     return head} // Function to delete last node of// Circular Linked Listfunction DeleteLast(head){    let current = head    let temp = head    let previous = null     // check if list doesn't have any node    // if not then return    if (head == null){        document.write("</br>","List is empty")        return null    }     // check if list have single node    // if yes then delete it and return    if (current.next == current){        head = null        return null    }     // move first node to last    // previous    while (current.next != head){        previous = current        current = current.next    }         previous.next = current.next    head = previous.next         return head} // Function delete node at a given position// of Circular Linked Listfunction DeleteAtPosition(head, index){     // Find length of list    len = Length(head)    count = 1    previous = head    next = head     // check list have any node    // if not then return    if (head == null){        document.write("</br>","Delete Last List is empty")        return null    }         // given index is in list or not    if (index >= len || index < 0) {        document.write("</br>","Index is not Found")        return null    }     // delete first node    if (index == 0){        head = DeleteFirst(head)        return head    }     // traverse first to last node    while (len > 0){             // if index found delete that node        if (index == count){            previous.next = next.next                         return head        }                 previous = previous.next        next = previous.next        len = len - 1        count = count + 1    }    return head} // Driver Code let head = nullhead = Insert(head, 99)head = Insert(head, 11)head = Insert(head, 22)head = Insert(head, 33)head = Insert(head, 44)head = Insert(head, 55)head = Insert(head, 66) // Deleting Node at positiondocument.write("Initial List: ")Display(head)document.write("</br>","After Deleting node at index 4: ")head = DeleteAtPosition(head, 4)Display(head) // Deleting first Nodedocument.write("</br>","</br>","Initial List: ")Display(head)document.write("</br>","After Deleting first node: ")head = DeleteFirst(head)Display(head) // Deleting last Nodedocument.write("</br>","</br>","Initial List: ")Display(head)document.write("</br>","After Deleting last node: ")head = DeleteLast(head)Display(head) // This code is contributed by shinjanpatra </script>
Initial List: 99 11 22 33 44 55 66 
After Deleting node at index 4: 99 11 22 33 55 66 

Initial List: 99 11 22 33 55 66 
After Deleting first node: 11 22 33 55 66 

Initial List: 11 22 33 55 66 
After Deleting last node: 11 22 33 55
 
andrew1234
Rajput-Ji
rutvik_56
pratham76
aashish1995
avanitrachhadiya2155
rag2127
sweetyty
adnanirshad158
shivanisinghss2110
shinjanpatra
vinayedula
sumitgumber28
circular linked list
Technical Scripter 2018
Linked List
Technical Scripter
Linked List
circular linked list
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
LinkedList in Java
Introduction to Data Structures
Doubly Linked List | Set 1 (Introduction and Insertion)
Detect loop in a linked list
Merge two sorted linked lists
Find the middle of a given linked list
What is Data Structure: Types, Classifications and Applications
Linked List vs Array
Merge Sort for Linked Lists
Implementing a Linked List in Java using Class