Insert a node at a specific position in a linked list in C

C Program to Insert a node in a Singly Linked List at a given position

On this page, we will look at different ways and methods to write a C Program for Insertion in a Singly Linked List at a given position in C Language.

insert a node

Method Overview

Method for Linked List Insertion at specific position in C

  • If the user wants to insert a node at nth position
  • First check if the position is in the range [1, size] otherwise it is an invalid position.
  • Create the memory and assign data value to this new Node
  • Visit the (n-1)th node and change its next pointer to this new Node
  • Assign the next pointer of this new Node to (n+1)th node

Also, take care if pos == 1 as we will need to change the head also in this case.

Insertion a specific position in C in a Linked List
// Program for Singly Linked List Insertion at a given position in C
#include<stdio.h>
#include<stdlib.h> struct Node{ int data; struct Node *next; }; // current size of Linked List int size = 0; void insert(struct Node** head, int data){ struct Node* new_node = (struct Node*) malloc(sizeof(struct Node)); new_node->data = data; new_node->next = *head; *head = new_node; size++; } // method to insert at a given position void insertPosition(int pos, int data, struct Node** head) { struct Node* new_node = (struct Node*) malloc(sizeof(struct Node)); new_node->data = data; new_node->next = NULL; // Invalid positions if(pos < 1 || pos > size + 1) printf("Invalid\n"); // inserting first node else if(pos == 1){ new_node->next = *head; *head = new_node; size++; } else { struct Node* temp = *head; // traverse till the current (pos-1)th node while(--pos > 1){ temp = temp->next; } new_node->next= temp->next; temp->next = new_node; size++; } } void display(struct Node* node){ printf("Linked List : "); // as linked list will end when Node is Null while(node!=NULL){ printf("%d ",node->data); node = node->next; } printf("\n"); } int main() { struct Node* head = NULL; insert(&head, 70); insert(&head, 60); insert(&head, 40); insert(&head, 30); insert(&head, 10); display(head); // Inserts data: 20 at 2nd position insertPosition(2, 20, &head); // Inserts data: 50 at 5th position insertPosition(5, 50, &head); // Inserts data: 80 at 8th position insertPosition(8, 80, &head); display(head); return 0; }

Output

Linked List : 10 30 40 60 70 
Linked List : 10 20 30 40 50 60 70 80