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->10Input: 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);
// 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
<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)
Auxiliary Space: O(1)
Article Tags :
Recommended Articles