C Exercises: Delete a node from the middle of a circular linked list
C Doubly Linked List : Exercise-17 with Solution
Write a program in C to delete a node from the middle of a circular linked list.
Visual Presentation:
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 ClListDeleteMiddle(int pos);
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 from the middle 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);
// User input for the position to delete a node
printf("\n Input the position to delete the node : ");
scanf("%d", &pos);
ClListDeleteMiddle(pos);
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 a node from the middle of the circular linked list
void ClListDeleteMiddle(int pos) {
int delNode, k = 1;
delNode = pos;
p = stnode;
// Traversing to the specified position
while (k != delNode) {
q = p;
p = p->nextptr;
k++;
}
// Removing the node at the specified position
q->nextptr = p->nextptr;
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 from the middle 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 Input the position to delete the node : 3 The deleted node is : 8 After deletion the new list are : Data 1 = 2 Data 2 = 5
Flowchart:
ClListcreation() :
ClListDeleteMiddle() :
displayClList() :
C Programming Code Editor:
Previous: Write a program in C to delete node from the beginning of a circular linked list.
Next: Write a program in C to delete the node from the end of a circular linked list.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://www.w3resource.com/c-programming-exercises/linked_list/c-linked_list-exercise-27.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics