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

 `// 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); ` ` `  `    ``// insertion 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); ` ` `  `        ``// insertion 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 `

## Python3

 `# Python3 program for insertion in a single linked ` `# list at a specified position ` `  `  `# A linked list Node ` `class` `Node:   ` `    ``def` `__init__(``self``, data):     ` `        ``self``.data ``=` `data ` `        ``self``.nextNode ``=` `None` `  `  `# function to create and return a Node ` `def` `getNode(data): ` ` `  `    ``# allocating space ` `    ``newNode ``=` `Node(data) ` `    ``return` `newNode; ` ` `  `# function to insert a Node at required position ` `def` `insertPos(headNode, position, data):  ` `    ``head ``=` `headNode ` `     `  `    ``# This condition to check whether the ` `    ``# position given is valid or not. ` `    ``if` `(position < ``1``):         ` `        ``print``(``"Invalid position!"``) ` `     `  `    ``if` `position ``=``=` `1``: ` `        ``newNode ``=` `Node(data) ` `        ``newNode.nextNode ``=` `headNode ` `        ``head ``=` `newNode ` `             `  `    ``else``: ` `       `  `        ``# Keep looping until the position is zero ` `        ``while` `(position !``=` `0``):            ` `            ``position ``-``=` `1` `  `  `            ``if` `(position ``=``=` `1``): ` `  `  `               ``# adding Node at required position ` `               ``newNode ``=` `getNode(data) ` ` `  `               ``# Making the new Node to point to ` `               ``# the old Node at the same position ` `               ``newNode.nextNode ``=` `headNode.nextNode ` ` `  `               ``# Replacing headNode with new Node ` `               ``# to the old Node to point to the new Node ` `               ``headNode.nextNode ``=` `newNode ` `               ``break` `             `  `            ``headNode ``=` `headNode.nextNode ` `            ``if` `headNode ``=``=` `None``: ` `                ``break`             `        ``if` `position !``=` `1``: ` `              ``print``(``"position out of range"``)         ` `    ``return` `head ` `      `  `# This function prints contents  ` `# of the linked list  ` `def` `printList(head): ` `    ``while` `(head !``=` `None``):        ` `        ``print``(``' '` `+` `str``(head.data), end ``=` `'') ` `        ``head ``=` `head.nextNode;     ` `    ``print``() ` `      `  `# Driver Code ` `if` `__name__``=``=``'__main__'``: ` `     `  `    ``# Creating the list 3.5.8.10 ` `    ``head ``=` `getNode(``3``); ` `    ``head.nextNode ``=` `getNode(``5``); ` `    ``head.nextNode.nextNode ``=` `getNode(``8``); ` `    ``head.nextNode.nextNode.nextNode ``=` `getNode(``10``); ` `    ``print``(``"Linked list before insertion: "``, end``=``'') ` `    ``printList(head);  ` `    ``data ``=` `12` `    ``position ``=` `3``; ` `    ``head ``=` `insertPos(head, position, data); ` `    ``print``(``"Linked list after insertion of 12 at position 3: "``, end ``=` `'') ` `    ``printList(head); ` `  `  `    ``# front of the linked list ` `    ``data ``=` `1` `    ``position ``=` `1``; ` `    ``head ``=` `insertPos(head, position, data); ` `    ``print``(``"Linked list after insertion of 1 at position 1: "``, end ``=` `'') ` `    ``printList(head); ` `  `  `    ``# insertion at end of the linked list ` `    ``data ``=` `15` `    ``position ``=` `7``; ` `    ``head ``=` `insertPos(head, position, data); ` `    ``print``(``"Linked list after insertion of 15 at position 7: "``, end``=``'') ` `    ``printList(head); ` ` `  `# This code iscontributed by rutvik_56`

## 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); ` ` `  `            ``// insertion 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 `

## Javascript

 ` `

Time Complexity: O(N)
Auxiliary Space: O(1)

Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!