w3resource

C Exercises: Delete the node at the end of a circular linked list


18. Delete from End of Circular Linked List

Write a program in C to delete the node at the end of a circular linked list.

Visual Presentation:

C Exercises: Delete the node at the end of a circular linked list

Sample Solution:

C Code:

#include <stdio.h>
#include <stdlib.h>

// Structure definition for a node in a circular linked list
struct node {
    int num;
    struct node *nextptr;
}*stnode;

struct node *tail, *p, *q, *store;

// Function prototypes
void ClListcreation(int n);
void ClListDeleteLastNode();
void displayClList(int a);

int main() {
    int n, num1, a, pos;
    stnode = NULL;

    // User input for the number of nodes
    printf("\n\n Circular Linked List : Delete node at the end of a circular linked list :\n");
    printf("--------------------------------------------------------------------------------\n");
    printf(" Input the number of nodes : ");
    scanf("%d", &n);

    // Creating a circular linked list
    ClListcreation(n);
    a = 1;
    displayClList(a);

    // Deleting the last node
    ClListDeleteLastNode();
    a = 2;
    displayClList(a);

    return 0;
}

// Function to create a circular linked list
void ClListcreation(int n) {
    int i, num;
    struct node *preptr, *newnode;

    if (n >= 1) {
        stnode = (struct node *)malloc(sizeof(struct node));

        // Input for the first node
        printf(" Input data for node 1 : ");
        scanf("%d", &num);
        stnode->num = num;
        stnode->nextptr = NULL;
        preptr = stnode;

        // Loop to create subsequent nodes and link them to form a circular list
        for (i = 2; i <= n; i++) {
            newnode = (struct node *)malloc(sizeof(struct node));
            printf(" Input data for node %d : ", i);
            scanf("%d", &num);
            newnode->num = num;
            newnode->nextptr = NULL;
            preptr->nextptr = newnode;
            preptr = newnode;
        }
        preptr->nextptr = stnode; // Last node linking with the first node to form a circular list
    }
}

// Function to delete the last node of the circular linked list
void ClListDeleteLastNode() {
    p = stnode;
    while (p->nextptr != stnode) {
        q = p;
        p = p->nextptr;
    }
    q->nextptr = stnode;
    printf("\n The deleted node is : %d", p->num);
    free(p);
}

// Function to display the circular linked list
void displayClList(int m) {
    struct node *tmp;
    int n = 1;

    if (stnode == NULL) {
        printf(" No data found in the List yet.");
    } else {
        tmp = stnode;
        if (m == 1) {
            printf("\n Data entered in the list are :\n");
        } else {
            printf("\n After deletion the new list are :\n");
        }

        // Loop to display nodes in the circular list
        do {
            printf(" Data %d = %d\n", n, tmp->num);
            tmp = tmp->nextptr;
            n++;
        } while (tmp != stnode);
    }
}

Sample Output:

 Circular Linked List : Delete node at the end of a circular linked list :                                    
--------------------------------------------------------------------------------                              
 Input the number of nodes : 3                                                                                
 Input data for node 1 : 2                                                                                    
 Input data for node 2 : 5                                                                                    
 Input data for node 3 : 8                                                                                    
                                                                                                              
 Data entered in the list are :                                                                               
 Data 1 = 2                                                                                                   
 Data 2 = 5                                                                                                   
 Data 3 = 8                                                                                                   
                                                                                                              
 The deleted node is : 8                                                                                      
 After deletion the new list are :                                                                            
 Data 1 = 2                                                                                                   
 Data 2 = 5

Flowchart:

Flowchart: Delete node at the end of a circular linked list

ClListcreation() :

Flowchart: Delete node at the end of a circular linked list

ClListDeleteLastNode() :

Flowchart: Delete node at the end of a circular linked list

displayClList() :

Flowchart: Delete node at the end of a circular linked list

For more Practice: Solve these Related Problems:

  • Write a C program to delete the last node of a circular linked list and update the head’s pointer to maintain circularity.
  • Write a C program to remove the tail node of a circular linked list and then display the modified list.
  • Write a C program to delete the last node using a two-pointer technique in a circular linked list.
  • Write a C program to recursively remove the last node from a circular linked list and ensure the list remains circular.

Go to:


PREV : Delete from Middle of Circular Linked List.
NEXT : Search in Circular Linked List.

C Programming Code Editor:



Have another way to solve this solution? Contribute your code (and comments) through Disqus.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.