Skip to content
Related Articles

Related Articles

Improve Article
Insert a node at a specific position in a linked list
  • Difficulty Level : Medium
  • Last Updated : 12 May, 2021

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 <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;
}

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

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

Javascript




<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 infornt 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 povar to
                    // the old Node at the same position
                    newNode.nextNode = headNode.nextNode;
 
                    // Replacing current with new Node
                    // to the old Node to povar 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);
 
        // insetion 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)
 



 

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live 




My Personal Notes arrow_drop_up
Recommended Articles
Page :