# Insertion to Linked List – Explanation, Types and Implementation

Insertion to linked list can be done in three ways:

1. Inserting a node at the front of linked list.
2. Inserting a node at the end of linked list.
3. Inserting a node at a specified location of linked list.

Say we have a linked list containing the elements 10, 20 and 30. Need to insert an element 50.

### 1. Inserting a node at the Front of Linked List

As the name implied, inserting the new element 50 before the element 10. A new node will be created containing element 50 pointing to the first node above list. Head will now point to this new node.

#### Implementation in C

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

//DECLARATION
struct node
{
int data;
struct node *next;
};

// This function insert a new node to the front of linked list
struct node* insertToFront(struct node *head, int data)
{
struct node *temp = (struct node*)malloc(sizeof(struct node));
temp->data = data;
}

{
while (list)
{
printf(" %d ", list->data);
list = list->next; // accessing and assigning the next element of list
}
}

// Main method to initialize the program
int main()
{
//INITIALIZATION
//Declare and allocate 3 nodes in the heap
struct node* first = (struct node*)malloc(sizeof(struct node));
struct node* second = (struct node*)malloc(sizeof(struct node));
struct node* third = (struct node*)malloc(sizeof(struct node));

//ASSIGNINMENT
first->data = 10; //assign data in first node
first->next = second; // Link first node with second

second->data = 20; //assign data to second node
second->next = third;

third->data = 30; //assign data to third node
third->next = NULL;

return 0;
}
```
```Output:-

50 10 20 30
```

### 2. Insertion a node at the End of Linked List

As the name implied, inserting the new element 50 after the 30.  A new node will be created containing element 50 which points null and last node of the list point to the new node.

#### Implementation in C

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

//DECLARATION
struct node
{
int data;
struct node *next;
};

// This function insert a new node to the end of linked list
void insertToEnd(struct node *list, int data)
{
struct node *temp = (struct node*)malloc(sizeof(struct node));
temp->data = data;
temp->next = NULL;
while(list->next){
list = list->next;
}
list->next = temp;
}

{
while (list)
{
printf(" %d ", list->data);
list = list->next; // accessing and assigning the next element of list
}
}

// Main method to initialize the program
int main()
{
//INITIALIZATION
//Declare and allocate 3 nodes in the heap
struct node* first = (struct node*)malloc(sizeof(struct node));
struct node* second = (struct node*)malloc(sizeof(struct node));
struct node* third = (struct node*)malloc(sizeof(struct node));

//ASSIGNINMENT
first->data = 10; //assign data in first node
first->next = second; // Link first node with second

second->data = 20; //assign data to second node
second->next = third;

third->data = 30; //assign data to third node
third->next = NULL;

return 0;
}
```
```Output:-

10 20 30 50```

### 3. Insertion a node at the Specified location in linked list

Say want to insert element 50 after element 20. A new node containing 50 will be created and Node containing 20 will point New node and that new node will point the node containing 30.

#### Implementation in C

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

//DECLARATION
struct node
{
int data;
struct node *next;
};

// This function insert a new node after 20
void insertToPosition(struct node *list, int knownData, int data)
{
struct node *temp = (struct node*)malloc(sizeof(struct node));
temp->data = data;

while(list->data != 20){
list = list->next;
}
temp->next = list->next;
list->next = temp;
}

{
while (list)
{
printf(" %d ", list->data);
list = list->next; // accessing and assigning the next element of list
}
}

// Main method to initialize the program
int main()
{
//INITIALIZATION
//Declare and allocate 3 nodes in the heap
struct node* first = (struct node*)malloc(sizeof(struct node));
struct node* second = (struct node*)malloc(sizeof(struct node));
struct node* third = (struct node*)malloc(sizeof(struct node));

//ASSIGNINMENT
first->data = 10; //assign data in first node
first->next = second; // Link first node with second

second->data = 20; //assign data to second node
second->next = third;

third->data = 30; //assign data to third node
third->next = NULL;

//Insert after 20

return 0;
}

```
```Output:-

10 20 50 30
```

Note:-
There is one more variant of insertion a node a specified location in which instead of value, a location is given where we have to insert the new node. For ex – insert a node at 3rd position from the beginning, insert element as the second last element of the list etc. Here element is not mentioned rather position is provided. In such scenarios instead of checking condition on the values, we keep a track on the number of nodes processed and then insert the node at the specified location.

Knowledge is most useful when liberated and shared. Share this to motivate us to keep writing such online tutorials for free and do comment if anything is missing or wrong or you need any kind of help.

Keep Learning… Happy Learning.. 🙂