# 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
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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++

 `// C++ program for insertion in a single linked ` `// list at a specified position ` `#include ` `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; ` `} `

## Java

 `// Java program for insertion in a single linked  ` `// list at a specified position  ` ` `  `class` `GFG { ` `    ``// A linked list Node ` `    ``static` `class` `Node { ` `        ``public` `int` `data; ` `        ``public` `Node nextNode; ` ` `  `        ``// inserting the required data ` `        ``public` `Node(``int` `data) { ` `            ``this``.data = data; ` ` `  `        ``} ` `    ``} ` ` `  `    ``// function to create and return a Node ` `    ``static` `Node GetNode(``int` `data) { ` `        ``return` `new` `Node(data); ` `    ``} ` ` `  `    ``// function to insert a Node at required position ` `    ``static` `Node InsertPos(Node headNode, ``int` `position, ``int` `data) { ` `        ``Node head = headNode; ` `        ``if` `(position < ``1``) ` `            ``System.out.print(``"Invalid position"``); ` ` `  `        ``// if position is 1 then new node is ` `        ``// set infornt of head node ` `        ``// head node is changing. ` `        ``if` `(position == ``1``) { ` `            ``Node newNode = ``new` `Node(data); ` `            ``newNode.nextNode = headNode; ` `            ``head = newNode; ` `        ``} ``else` `{ ` `            ``while` `(position-- != ``0``) { ` `                ``if` `(position == ``1``) { ` `                    ``// adding Node at required position ` `                    ``Node newNode = GetNode(data); ` ` `  `                    ``// Making the new Node to point to ` `                    ``// the old Node at the same position ` `                    ``newNode.nextNode = headNode.nextNode; ` ` `  `                    ``// Replacing current with new Node ` `                    ``// to the old Node to point to the new Node ` `                    ``headNode.nextNode = newNode; ` `                    ``break``; ` `                ``} ` `                ``headNode = headNode.nextNode; ` `            ``} ` `            ``if` `(position != ``1``) ` `                ``System.out.print(``"Position out of range"``); ` `        ``} ` `        ``return` `head; ` `    ``} ` ` `  `    ``static` `void` `PrintList(Node node) { ` `        ``while` `(node != ``null``) { ` `            ``System.out.print(node.data); ` `            ``node = node.nextNode; ` `            ``if` `(node != ``null``) ` `                ``System.out.print(``","``); ` `        ``} ` `        ``System.out.println(); ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) { ` `        ``Node head = GetNode(``3``); ` `        ``head.nextNode = GetNode(``5``); ` `        ``head.nextNode.nextNode = GetNode(``8``); ` `        ``head.nextNode.nextNode.nextNode = GetNode(``10``); ` ` `  `        ``System.out.print(``"Linked list before insertion: "``); ` `        ``PrintList(head); ` ` `  `        ``int` `data = ``12``, pos = ``3``; ` `        ``head = InsertPos(head, pos, data); ` `        ``System.out.print(``"Linked list after"` `+ ``" insertion of 12 at position 3: "``); ` `        ``PrintList(head); ` ` `  `        ``// front of the linked list ` `        ``data = ``1``; ` `        ``pos = ``1``; ` `        ``head = InsertPos(head, pos, data); ` `        ``System.out.print(``"Linked list after"` `+ ``"insertion of 1 at position 1: "``); ` `        ``PrintList(head); ` ` `  `        ``// insetion at end of the linked list ` `        ``data = ``15``; ` `        ``pos = ``7``; ` `        ``head = InsertPos(head, pos, data); ` `        ``System.out.print(``"Linked list after"` `+ ``" insertion of 15 at position 7: "``); ` `        ``PrintList(head); ` `    ``} ` `} ` ` `  `// This code is contributed by Rajput-Ji `

## C#

 `// C# program for insertion in a single linked  ` `// list at a specified position  ` `using` `System; ` ` `  `namespace` `InsertIntoLinkedList ` `{ ` `    ``class` `Program ` `    ``{ ` `        ``// A linked list Node ` `        ``private` `class` `Node ` `        ``{ ` `            ``public` `int` `data; ` `            ``public` `Node nextNode; ` ` `  `            ``// inserting the required data  ` `            ``public` `Node(``int` `data) => ``this``.data = data; ` `        ``} ` ` `  `        ``// function to create and return a Node  ` `        ``static` `Node GetNode(``int` `data) => ``new` `Node(data); ` ` `  `        ``// function to insert a Node at required position  ` `        ``static` `Node InsertPos(Node headNode,  ` `                            ``int` `position, ``int` `data) ` `        ``{ ` `            ``var` `head = headNode; ` `            ``if` `(position < 1) ` `                ``Console.WriteLine(``"Invalid position"``); ` ` `  `            ``//if position is 1 then new node is  ` `            ``// set infornt of head node ` `            ``//head node is changing. ` `            ``if` `(position == 1) ` `            ``{ ` `                ``var` `newNode = ``new` `Node(data); ` `                ``newNode.nextNode = headNode; ` `                ``head = newNode; ` `            ``} ` `            ``else` `            ``{ ` `                ``while` `(position-- != 0) ` `                ``{ ` `                    ``if` `(position == 1) ` `                    ``{ ` `                        ``// adding Node at required position ` `                        ``Node newNode = GetNode(data); ` ` `  `                        ``// Making the new Node to point to  ` `                        ``// the old Node at the same position  ` `                        ``newNode.nextNode = headNode.nextNode; ` ` `  `                        ``// Replacing current with new Node  ` `                        ``// to the old Node to point to the new Node  ` `                        ``headNode.nextNode = newNode; ` `                        ``break``; ` `                    ``} ` `                    ``headNode = headNode.nextNode; ` `                ``} ` `                ``if` `(position != 1) ` `                    ``Console.WriteLine(``"Position out of range"``); ` `            ``} ` `            ``return` `head; ` `        ``} ` ` `  `        ``static` `void` `PrintList(Node node) ` `        ``{ ` `            ``while` `(node != ``null``) ` `            ``{ ` `                ``Console.Write(node.data); ` `                ``node = node.nextNode; ` `                ``if``(node != ``null``) ` `                    ``Console.Write(``","``); ` `            ``} ` `            ``Console.WriteLine(); ` `        ``} ` ` `  `        ``// Driver code ` `        ``static` `void` `Main(``string``[] args) ` `        ``{ ` `            ``var` `head = GetNode(3); ` `            ``head.nextNode = GetNode(5); ` `            ``head.nextNode.nextNode = GetNode(8); ` `            ``head.nextNode.nextNode.nextNode = GetNode(10); ` ` `  `            ``Console.WriteLine(``"Linked list before insertion: "``); ` `            ``PrintList(head); ` ` `  `            ``int` `data = 12, pos = 3; ` `            ``head = InsertPos(head, pos, data); ` `            ``Console.WriteLine(``"Linked list after"` `+ ` `                            ``" insertion of 12 at position 3: "``); ` `            ``PrintList(head); ` ` `  `            ``// front of the linked list  ` `            ``data = 1; pos = 1; ` `            ``head = InsertPos(head, pos, data); ` `            ``Console.WriteLine(``"Linked list after"` `+  ` `                            ``"insertion of 1 at position 1: "``); ` `            ``PrintList(head); ` ` `  `            ``// insetion at end of the linked list  ` `            ``data = 15; pos = 7; ` `            ``head = InsertPos(head, pos, data); ` `            ``Console.WriteLine(``"Linked list after"` `+  ` `                            ``" insertion of 15 at position 7: "``); ` `            ``PrintList(head); ` `        ``} ` `    ``} ` `} ` ` `  `// This code is contributed by dhirucoool `

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)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Problem solver, self learner, avid reader and chess lover )

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.