Insert a node at a specific position in a linked list

24 Jun, 2022
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++
Java
Python3
C#
Javascript
// C++ program for insertion in a single linked// list at a specified position#include <bits/stdc++.h>using namespace std;  // A linked list Nodestruct Node {    int data;    struct Node* next;};  // Size of linked listint size = 0;  // function to create and return a NodeNode* 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 positionvoid 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 Codeint 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 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 program for insertion in a single linked# list at a specified position   # A linked list Nodeclass Node:      def __init__(self, data):            self.data = data        self.nextNode = None   # function to create and return a Nodedef getNode(data):      # allocating space    newNode = Node(data)    return newNode;  # function to insert a Node at required positiondef 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 Codeif __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# 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
<script>// javascript program for insertion in a single linked // list at a specified position     // A linked list Node class Node {        // inserting the required data              constructor(val) {                this.data = val;                                  this.nextNode = null;            }        }           // function to create and return a Node    function GetNode(data) {        return new Node(data);    }      // function to insert a Node at required position    function InsertPos( headNode , position , data) {         head = headNode;        if (position < 1)            document.write("Invalid position");          // if position is 1 then new node is        // set infront of head node        // head node is changing.        if (position == 1) {             newNode = new Node(data);            newNode.nextNode = headNode;            head = newNode;        }         else        {            while (position-- != 0)            {                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 current with new Node                    // to the old Node to point to the new Node                    headNode.nextNode = newNode;                    break;                }                headNode = headNode.nextNode;            }            if (position != 1)                document.write("Position out of range");        }        return head;    }      function PrintList( node) {        while (node != null) {            document.write(node.data);            node = node.nextNode;            if (node != null)                document.write(",");        }        document.write("<br/>");    }      // Driver code               head = GetNode(3);        head.nextNode = GetNode(5);        head.nextNode.nextNode = GetNode(8);        head.nextNode.nextNode.nextNode = GetNode(10);          document.write("Linked list before insertion: ");        PrintList(head);          var data = 12, pos = 3;        head = InsertPos(head, pos, data);        document.write("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);        document.write("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);        document.write("Linked list after" + " insertion of 15 at position 7: ");        PrintList(head);  // This code is contributed by gauravrajput1.</script>
Time Complexity: O(N) 
 
Kirti_Mangal
dhirucoool
Rajput-Ji
rutvik_56
GauravRajput1
simmytarika5
arorakashish0911
cpp-double-pointer
Data Structures
Linked List
Data Structures
Linked List
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.