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

Given a singly linked list, a position and an element, the task is to write a program to insert that element in a linked list at a given position.

**Examples: **

Input: 3->5->8->10, data = 2, position = 2 Output: 3->2->5->8->10 Input: 3->5->8->10, data = 11, position = 5 Output: 3->5->8->10->11

**Approach:** To insert a given data at a specified position, the below algorithm is to be followed:

- Traverse the Linked list upto
*position-1*nodes. - Once all the
*position-1*nodes are traversed, allocate memory and the given data to the new node. - Point the next pointer of the new node to the next of current node.
- Point the next pointer of current node to the new node.

Below is the implementation of the above algorithm.

`// C++ program for insertion in a single linked ` `// list at a specified position ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// A linked list Node ` `struct` `Node { ` ` ` `int` `data; ` ` ` `struct` `Node* next; ` `}; ` ` ` `// Size of linked list ` `int` `size = 0; ` ` ` `// function to create and return a Node ` `Node* getNode(` `int` `data) ` `{ ` ` ` `// allocating space ` ` ` `Node* newNode = ` `new` `Node(); ` ` ` ` ` `// inserting the required data ` ` ` `newNode->data = data; ` ` ` `newNode->next = NULL; ` ` ` `return` `newNode; ` `} ` ` ` `// function to insert a Node at required position ` `void` `insertPos(Node** current, ` `int` `pos, ` `int` `data) ` `{ ` ` ` `// This condition to check whether the ` ` ` `// position given is valid or not. ` ` ` `if` `(pos < 1 || pos > size + 1) ` ` ` `cout << ` `"Invalid position!"` `<< endl; ` ` ` `else` `{ ` ` ` ` ` `// Keep looping until the pos is zero ` ` ` `while` `(pos--) { ` ` ` ` ` `if` `(pos == 0) { ` ` ` ` ` `// adding Node at required position ` ` ` `Node* temp = getNode(data); ` ` ` ` ` `// Making the new Node to point to ` ` ` `// the old Node at the same position ` ` ` `temp->next = *current; ` ` ` ` ` `// Changing the pointer of the Node previous ` ` ` `// to the old Node to point to the new Node ` ` ` `*current = temp; ` ` ` `} ` ` ` `else` ` ` `// Assign double pointer variable to point to the ` ` ` `// pointer pointing to the address of next Node ` ` ` `current = &(*current)->next; ` ` ` `} ` ` ` `size++; ` ` ` `} ` `} ` ` ` `// This function prints contents ` `// of the linked list ` `void` `printList(` `struct` `Node* head) ` `{ ` ` ` `while` `(head != NULL) { ` ` ` `cout << ` `" "` `<< head->data; ` ` ` `head = head->next; ` ` ` `} ` ` ` `cout << endl; ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `// Creating the list 3->5->8->10 ` ` ` `Node* head = NULL; ` ` ` `head = getNode(3); ` ` ` `head->next = getNode(5); ` ` ` `head->next->next = getNode(8); ` ` ` `head->next->next->next = getNode(10); ` ` ` ` ` `size = 4; ` ` ` ` ` `cout << ` `"Linked list before insertion: "` `; ` ` ` `printList(head); ` ` ` ` ` `int` `data = 12, pos = 3; ` ` ` `insertPos(&head, pos, data); ` ` ` `cout << ` `"Linked list after insertion of 12 at position 3: "` `; ` ` ` `printList(head); ` ` ` ` ` `// front of the linked list ` ` ` `data = 1, pos = 1; ` ` ` `insertPos(&head, pos, data); ` ` ` `cout << ` `"Linked list after insertion of 1 at position 1: "` `; ` ` ` `printList(head); ` ` ` ` ` `// insetion at end of the linked list ` ` ` `data = 15, pos = 7; ` ` ` `insertPos(&head, pos, data); ` ` ` `cout << ` `"Linked list after insertion of 15 at position 7: "` `; ` ` ` `printList(head); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output: **

Linked list before insertion: 3 5 8 10 Linked list after insertion of 12 at position 3: 3 5 12 8 10 Linked list after insertion of 1 at position 1: 1 3 5 12 8 10 Linked list after insertion of 15 at position 7: 1 3 5 12 8 10 15

**Time Complexity:** O(N)

## Recommended Posts:

- Insert a whole linked list into other at k-th position
- Insertion at Specific Position in a Circular Doubly Linked List
- Insert N elements in a Linked List one after other at middle position
- Insert node into the middle of the linked list
- Delete a Linked List node at a given position
- Delete a Doubly Linked List node at a given position
- Create new linked list from two given linked list with greater element at each node
- Create a linked list from two linked lists by choosing max element at each position
- Swap Kth node from beginning with Kth node from end in a Linked List
- Rotate the sub-list of a linked list from position M to N to the right by K places
- Sorted insert for circular linked list
- Sorted insert in a doubly linked list with head and tail pointers
- Make a loop at k-th position in a linked list
- Squareroot(n)-th node in a Linked List
- Remove first node of the linked list

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.