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.
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.
Program for Singly Linked List Insertion at a specific position in C
Run
// 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

Login/Signup to comment