C Data Structures - Linked List Other Related Topics
Python Java C++ C C# PHP R SQL DS Algo InterviewQ

C - Delete the first node of the Linked List



In this method, the first node of the linked list is deleted. For example - if the given list is 10->20->30->40 and the first node is deleted, the list becomes 20->30->40.

Deleting the first node of the Linked List is very easy. If the head is not null then create a temp node pointing to head and move head to the next of head. Then delete the temp node.

Linked List - Delete First Node

The function pop_front is created for this purpose. It is a 3-step process.

void pop_front(struct Node** head_ref) {
  if(*head_ref != NULL) {
    
    //1. if head is not null, create a
    //   temp node pointing to head
    struct Node *temp = *head_ref;
     
    //2. move head to next of head
    *head_ref = (*head_ref)->next;

    //3. delete temp node
    temp = NULL;  
  }    
}

The below is a complete program that uses above discussed concept of deleting the first node of the linked list.

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

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

//Add new element at the end of the list
void push_back(struct Node** n, int newElement) {  
  struct Node *newNode, *temp;
  newNode = (struct Node*)malloc(sizeof(struct Node)); 
  newNode->data = newElement;  
  newNode->next = NULL;
  if(*n == NULL) {
    *n = newNode; 
  } else {
    temp = *n;
    while(temp->next != NULL) {
      temp = temp->next;
    }    
    temp->next = newNode;
  }
}

//Delete first node of the list
void pop_front(struct Node** head_ref) {
  if(*head_ref != NULL) {
    struct Node *temp = *head_ref;
    *head_ref = (*head_ref)->next;
    temp = NULL;  
  }    
}

//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 four elements in the list.
  push_back(&MyList, 10);
  push_back(&MyList, 20);
  push_back(&MyList, 30);
  push_back(&MyList, 40);
  PrintList(MyList);

  //Delete the first node
  pop_front(&MyList);
  PrintList(MyList);
  return 0; 
}

The above code will give the following output:

The list contains: 10 20 30 40
The list contains: 20 30 40 

5