Open in App
Not now

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

• Difficulty Level : Medium
• Last Updated : 11 Jan, 2023

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)

My Personal Notes arrow_drop_up
Related Articles