C Data Structures - Doubly Linked List Other Related Topics

C - Insert a new node at the start of the Doubly Linked List



In this method, a new node is inserted at the start of the doubly linked list. For example - if the given List is 10->20->30 and a new element 100 is added at the start, the List becomes 100->10->20->30.

Inserting a new node at the start of the doubly linked list is very easy. First, a new node with given element is created. It is then added at the start of the list by linking the head node to the new node.

Doubly Linked List - Add Node At Start

The function push_front is created for this purpose. It is a 5-step process.

void push_front(struct Node** head_ref, int newElement) {  
  
  //1. allocate node
  struct Node *newNode, *temp;
  newNode = (struct Node*)malloc(sizeof(struct Node)); 
  
  //2. assign data element
  newNode->data = newElement;  
  
  //3. assign null to the next and prev
  //   of the new node
  newNode->next = NULL;
  newNode->prev = NULL;

  //4. Check the list is empty or not,
  //   if empty make the new node as head 
  if(*head_ref == NULL) {
    *head_ref = newNode;
  } else {  
    
    //5. Adjust the links and make the new
    //   node as head
    (*head_ref)->prev = newNode;
    newNode->next = *head_ref;
    *head_ref = newNode;
  }
}

The below is a complete program that uses above discussed concept to insert new node at the start of the doubly linked list.

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

//node structure
struct Node {
  int data;
  struct Node* next;
  struct Node* prev;
};

//Add new element at the start of the list
void push_front(struct Node** head_ref, int newElement) {  
  struct Node *newNode, *temp;
  newNode = (struct Node*)malloc(sizeof(struct Node)); 
  newNode->data = newElement;  
  newNode->next = NULL;
  newNode->prev = NULL;
  if(*head_ref == NULL) {
    *head_ref = newNode;
  } else {  
    (*head_ref)->prev = newNode;
    newNode->next = *head_ref;
    *head_ref = newNode;
  }
}

//display the content of the list
void PrintList(struct Node* head_ref) {
  struct Node* temp = head_ref;
  if(head_ref != NULL) {
    printf("The list contains: ");
    while (temp != NULL) {
      printf("%i ",temp->data);
      temp = temp->next;  
    }
    printf("\n");
  } else {
    printf("The list is empty.\n");
  }   
}

// test the code 
int main() {
  struct Node* MyList = NULL;

  //Add three elements at the start of the list.
  push_front(&MyList, 10);
  push_front(&MyList, 20);
  push_front(&MyList, 30);
  PrintList(MyList);

  return 0; 
}

The above code will give the following output:

The list contains: 30 20 10