w3resource

C Exercises: Insert new node at the beginning in a doubly linked list


3. Insert at Beginning of Doubly Linked List

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

Visual Presentation:

C Exercises: Insert new node at the beginning in a doubly linked list

Sample Solution:

C Code:

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

// Structure for a doubly linked list node
struct node {
    int num;
    struct node *preptr;
    struct node *nextptr;
} *stnode, *ennode;

// Function prototypes
void DlListcreation(int n);
void DlLinsertNodeAtBeginning(int num);
void displayDlList(int a);

int main() {
    int n, num1, a;
    stnode = NULL;
    ennode = NULL;
    printf("\n\n Doubly Linked List: Insert new node at the beginning in a doubly linked list:\n");
    printf("------------------------------------------------------------------------------------\n");

    printf(" Input the number of nodes : ");
    scanf("%d", &n);
    DlListcreation(n);  // Create a doubly linked list
    a = 1;
    displayDlList(a);  // Display the original doubly linked list

    printf(" Input data for the first node : ");
    scanf("%d", &num1);
    DlLinsertNodeAtBeginning(num1);  // Insert a new node at the beginning
    a = 2;
    displayDlList(a);  // Display the doubly linked list after insertion
    return 0;
}

// Function to create a doubly linked list
void DlListcreation(int n) {
    int i, num;
    struct node *fnNode;

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

        if (stnode != NULL) {
            printf(" Input data for node 1 : ");
            scanf("%d", &num);

            stnode->num = num;
            stnode->preptr = NULL;
            stnode->nextptr = NULL;
            ennode = stnode;

            // Create nodes and link them to form the doubly linked list
            for (i = 2; i <= n; i++) {
                fnNode = (struct node *)malloc(sizeof(struct node));
                if (fnNode != NULL) {
                    printf(" Input data for node %d : ", i);
                    scanf("%d", &num);
                    fnNode->num = num;
                    fnNode->preptr = ennode;
                    fnNode->nextptr = NULL;

                    ennode->nextptr = fnNode;
                    ennode = fnNode;
                } else {
                    printf(" Memory can not be allocated.");
                    break;
                }
            }
        } else {
            printf(" Memory can not be allocated.");
        }
    }
}

// Function to insert a new node at the beginning of the doubly linked list
void DlLinsertNodeAtBeginning(int num) {
    struct node *newnode;
    if (stnode == NULL) {
        printf(" No data found in the list!\n");
    } else {
        newnode = (struct node *)malloc(sizeof(struct node));
        newnode->num = num;
        newnode->nextptr = stnode;
        newnode->preptr = NULL;
        stnode->preptr = newnode;
        stnode = newnode;
    }
}

// Function to display the doubly linked list
void displayDlList(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 is :\n");
        }
        while (tmp != NULL) {
            printf(" node %d : %d\n", n, tmp->num);
            n++;
            tmp = tmp->nextptr;
        }
    }
}

Sample Output:

Doubly Linked List : Insert new node at the beginning in a doubly 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 :                                                                               
 node 1 : 2                                                                                                   
 node 2 : 5                                                                                                   
 node 3 : 8                                                                                                   
 Input data for the first node : 1                                                                            
                                                                                                              
 After insertion the new list are :                                                                           
 node 1 : 1                                                                                                   
 node 2 : 2                                                                                                   
 node 3 : 5                                                                                                   
 node 4 : 8

Flowchart:

Flowchart: Insert new node at the beginning in a doubly linked list

DlListcreation() :

Flowchart: Insert new node at the beginning in a doubly linked list

DlLinsertNodeAtBeginning() :

Flowchart: Insert new node at the beginning in a doubly linked list

displayDlList() :

Flowchart: Insert new node at the beginning in a doubly linked list

For more Practice: Solve these Related Problems:

  • Write a C program to insert a node at the beginning of a doubly linked list only if its value is less than the current head’s value.
  • Write a C program to insert multiple nodes at the beginning of a doubly linked list in a loop and then display the list.
  • Write a C program to insert a node at the start of a doubly linked list using a recursive function to update the head pointer.
  • Write a C program to insert a node at the beginning and then immediately verify the circularity of the list by counting nodes.

Go to:


PREV : Reverse Display of Doubly Linked List.
NEXT : Insert at End of Doubly 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.