w3resource

C Exercises: Insert a node at the beginning of a circular linked list


13. Insert at Beginning of Circular Linked List

Write a program in C to insert a node at the beginning of a circular linked list.

Visual Presentation:

C Exercises: Insert a node at the beginning of a circular linked list

Sample Solution:

C Code:

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

struct node {
    int num;
    struct node *nextptr;
}*stnode;

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

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

    // User input for the number of nodes
    printf("\n\n Circular Linked List : Insert a node at the beginning 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);

    // Input data to be inserted at the beginning
    printf(" Input data to be inserted at the beginning : ");
    scanf("%d", &num1);

    // Inserting a node at the beginning
    ClLinsertNodeAtBeginning(num1);
    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));
        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; // Setting the next address of the new node as NULL
            preptr->nextptr = newnode; // Linking the previous node with the new node
            preptr = newnode; // Advancing the previous node to the new node
        }
        preptr->nextptr = stnode; // Linking the last node with the first node to form a circular list
    }
}

// Function to insert a node at the beginning of the circular linked list
void ClLinsertNodeAtBeginning(int num) {
    struct node *newnode, *curNode;

    if (stnode == NULL) {
        printf(" No data found in the List yet.");
    } else {
        newnode = (struct node *)malloc(sizeof(struct node));
        newnode->num = num;
        newnode->nextptr = stnode;
        curNode = stnode;

        // Finding the last node in the circular list
        while (curNode->nextptr != stnode) {
            curNode = curNode->nextptr;
        }

        // Linking the last node with the new node at the beginning
        curNode->nextptr = newnode;
        stnode = newnode;
    }
}

// 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 insertion 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 : Insert a node at the beginning 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 data to be inserted at the beginning : 1                                                               
                                                                                                              
 After insertion the new list are :                                                                           
 Data 1 = 1                                                                                                   
 Data 2 = 2                                                                                                   
 Data 3 = 5                                                                                                   
 Data 4 = 8

Flowchart:

Flowchart: Insert a node at the beginning of a circular linked list

ClListcreation() :

Flowchart: Insert a node at the beginning of a circular linked list

ClLinsertNodeAtBeginning() :

Flowchart: Insert a node at the beginning of a circular linked list

displayClList() :

Flowchart: Insert a node at the beginning of a circular linked list

For more Practice: Solve these Related Problems:

  • Write a C program to insert a node at the beginning of a circular linked list and update the last node’s pointer correctly.
  • Write a C program to insert a node at the beginning only if its value is lower than the current head’s value in a circular linked list.
  • Write a C program to insert several nodes at the beginning of a circular linked list in succession and then display the list.
  • Write a C program to insert a node at the beginning of a circular linked list and verify the circular structure by counting nodes.

Go to:


PREV : Circular Linked List Creation and Display.
NEXT : Insert at End of 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.