Insert a node after the n-th node from the end
Last Updated :
02 Jan, 2023
Insert a node x after the nth node from the end in the given singly linked list. It is guaranteed that the list contains the nth node from the end. Also 1 <= n.
Examples:
Input : list: 1->3->4->5
n = 4, x = 2
Output : 1->2->3->4->5
4th node from the end is 1 and
insertion has been done after this node.
Input : list: 10->8->3->12->5->18
n = 2, x = 11
Output : 10->8->3->12->5->11->18
Method 1 (Using length of the list): Find the length of the linked list, i.e, the number of nodes in the list. Let it be len. Now traverse the list from the 1st node upto the (len-n+1)th node from the beginning and insert the new node after this node. This method requires two traversals of the list.
Implementation:
C++
// C++ implementation to insert a node after
// the n-th node from the end
#include <bits/stdc++.h>
using namespace std;
// structure of a node
struct Node {
int data;
Node* next;
};
// function to get a new node
Node* getNode(int data)
{
// allocate memory for the node
Node* newNode = (Node*)malloc(sizeof(Node));
// put in the data
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// function to insert a node after the
// nth node from the end
void insertAfterNthNode(Node* head, int n, int x)
{
// if list is empty
if (head == NULL)
return;
// get a new node for the value 'x'
Node* newNode = getNode(x);
Node* ptr = head;
int len = 0, i;
// find length of the list, i.e, the
// number of nodes in the list
while (ptr != NULL) {
len++;
ptr = ptr->next;
}
// traverse up to the nth node from the end
ptr = head;
for (i = 1; i <= (len - n); i++)
ptr = ptr->next;
// insert the 'newNode' by making the
// necessary adjustment in the links
newNode->next = ptr->next;
ptr->next = newNode;
}
// function to print the list
void printList(Node* head)
{
while (head != NULL) {
cout << head->data << " ";
head = head->next;
}
}
// Driver program to test above
int main()
{
// Creating list 1->3->4->5
Node* head = getNode(1);
head->next = getNode(3);
head->next->next = getNode(4);
head->next->next->next = getNode(5);
int n = 4, x = 2;
cout << "Original Linked List: ";
printList(head);
insertAfterNthNode(head, n, x);
cout << "\nLinked List After Insertion: ";
printList(head);
return 0;
}
// This code is contributed by Sania Kumari Gupta (kriSania804)
C
// C implementation to insert a node after
// the n-th node from the end
#include <stdio.h>
#include <stdlib.h>
// structure of a node
typedef struct Node {
int data;
struct Node* next;
} Node;
// function to get a new node
Node* getNode(int data)
{
// allocate memory for the node
Node* newNode = (Node*)malloc(sizeof(Node));
// put in the data
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// function to insert a node after the
// nth node from the end
void insertAfterNthNode(Node* head, int n, int x)
{
// if list is empty
if (head == NULL)
return;
// get a new node for the value 'x'
Node* newNode = getNode(x);
Node* ptr = head;
int len = 0, i;
// find length of the list, i.e, the
// number of nodes in the list
while (ptr != NULL) {
len++;
ptr = ptr->next;
}
// traverse up to the nth node from the end
ptr = head;
for (i = 1; i <= (len - n); i++)
ptr = ptr->next;
// insert the 'newNode' by making the
// necessary adjustment in the links
newNode->next = ptr->next;
ptr->next = newNode;
}
// function to print the list
void printList(Node* head)
{
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
}
// Driver program to test above
int main()
{
// Creating list 1->3->4->5
Node* head = getNode(1);
head->next = getNode(3);
head->next->next = getNode(4);
head->next->next->next = getNode(5);
int n = 4, x = 2;
printf("Original Linked List: ");
printList(head);
insertAfterNthNode(head, n, x);
printf("\nLinked List After Insertion: ");
printList(head);
return 0;
}
// This code is contributed by Sania Kumari Gupta (kriSania804)
Java
// Java implementation to insert a node after
// the n-th node from the end
class GfG
{
// structure of a node
static class Node
{
int data;
Node next;
}
// function to get a new node
static Node getNode(int data)
{
// allocate memory for the node
Node newNode = new Node();
// put in the data
newNode.data = data;
newNode.next = null;
return newNode;
}
// function to insert a node after the
// nth node from the end
static void insertAfterNthNode(Node head, int n, int x)
{
// if list is empty
if (head == null)
return;
// get a new node for the value 'x'
Node newNode = getNode(x);
Node ptr = head;
int len = 0, i;
// find length of the list, i.e, the
// number of nodes in the list
while (ptr != null)
{
len++;
ptr = ptr.next;
}
// traverse up to the nth node from the end
ptr = head;
for (i = 1; i <= (len - n); i++)
ptr = ptr.next;
// insert the 'newNode' by making the
// necessary adjustment in the links
newNode.next = ptr.next;
ptr.next = newNode;
}
// function to print the list
static void printList(Node head)
{
while (head != null)
{
System.out.print(head.data + " ");
head = head.next;
}
}
// Driver code
public static void main(String[] args)
{
// Creating list 1->3->4->5
Node head = getNode(1);
head.next = getNode(3);
head.next.next = getNode(4);
head.next.next.next = getNode(5);
int n = 4, x = 2;
System.out.print("Original Linked List: ");
printList(head);
insertAfterNthNode(head, n, x);
System.out.println();
System.out.print("Linked List After Insertion: ");
printList(head);
}
}
// This code is contributed by prerna saini
Python3
# Python implementation to insert a node after
# the n-th node from the end
# Linked List node
class Node:
def __init__(self, data):
self.data = data
self.next = None
# function to get a new node
def getNode(data) :
# allocate memory for the node
newNode = Node(0)
# put in the data
newNode.data = data
newNode.next = None
return newNode
# function to insert a node after the
# nth node from the end
def insertAfterNthNode(head, n, x) :
# if list is empty
if (head == None) :
return
# get a new node for the value 'x'
newNode = getNode(x)
ptr = head
len = 0
i = 0
# find length of the list, i.e, the
# number of nodes in the list
while (ptr != None) :
len = len + 1
ptr = ptr.next
# traverse up to the nth node from the end
ptr = head
i = 1
while ( i <= (len - n) ) :
ptr = ptr.next
i = i + 1
# insert the 'newNode' by making the
# necessary adjustment in the links
newNode.next = ptr.next
ptr.next = newNode
# function to print the list
def printList( head) :
while (head != None):
print(head.data ,end = " ")
head = head.next
# Driver code
# Creating list 1->3->4->5
head = getNode(1)
head.next = getNode(3)
head.next.next = getNode(4)
head.next.next.next = getNode(5)
n = 4
x = 2
print("Original Linked List: ")
printList(head)
insertAfterNthNode(head, n, x)
print()
print("Linked List After Insertion: ")
printList(head)
# This code is contributed by Arnab Kundu
C#
// C# implementation to insert a node after
// the n-th node from the end
using System;
class GfG
{
// structure of a node
public class Node
{
public int data;
public Node next;
}
// function to get a new node
static Node getNode(int data)
{
// allocate memory for the node
Node newNode = new Node();
// put in the data
newNode.data = data;
newNode.next = null;
return newNode;
}
// function to insert a node after the
// nth node from the end
static void insertAfterNthNode(Node head, int n, int x)
{
// if list is empty
if (head == null)
return;
// get a new node for the value 'x'
Node newNode = getNode(x);
Node ptr = head;
int len = 0, i;
// find length of the list, i.e, the
// number of nodes in the list
while (ptr != null)
{
len++;
ptr = ptr.next;
}
// traverse up to the nth node from the end
ptr = head;
for (i = 1; i <= (len - n); i++)
ptr = ptr.next;
// insert the 'newNode' by making the
// necessary adjustment in the links
newNode.next = ptr.next;
ptr.next = newNode;
}
// function to print the list
static void printList(Node head)
{
while (head != null)
{
Console.Write(head.data + " ");
head = head.next;
}
}
// Driver code
public static void Main(String[] args)
{
// Creating list 1->3->4->5
Node head = getNode(1);
head.next = getNode(3);
head.next.next = getNode(4);
head.next.next.next = getNode(5);
int n = 4, x = 2;
Console.Write("Original Linked List: ");
printList(head);
insertAfterNthNode(head, n, x);
Console.WriteLine();
Console.Write("Linked List After Insertion: ");
printList(head);
}
}
// This code has been contributed by 29AjayKumar
JavaScript
<script>
// JavaScript implementation to
// insert a node after
// the n-th node from the end
// structure of a node
class Node {
constructor() {
this.data = 0;
this.next = null;
}
}
// function to get a new node
function getNode(data) {
// allocate memory for the node
var newNode = new Node();
// put in the data
newNode.data = data;
newNode.next = null;
return newNode;
}
// function to insert a node after the
// nth node from the end
function insertAfterNthNode(head , n , x) {
// if list is empty
if (head == null)
return;
// get a new node for the value 'x'
var newNode = getNode(x);
var ptr = head;
var len = 0, i;
// find length of the list, i.e, the
// number of nodes in the list
while (ptr != null) {
len++;
ptr = ptr.next;
}
// traverse up to the nth node from the end
ptr = head;
for (i = 1; i <= (len - n); i++)
ptr = ptr.next;
// insert the 'newNode' by making the
// necessary adjustment in the links
newNode.next = ptr.next;
ptr.next = newNode;
}
// function to print the list
function printList(head) {
while (head != null) {
document.write(head.data + " ");
head = head.next;
}
}
// Driver code
// Creating list 1->3->4->5
var head = getNode(1);
head.next = getNode(3);
head.next.next = getNode(4);
head.next.next.next = getNode(5);
var n = 4, x = 2;
document.write("Original Linked List: ");
printList(head);
insertAfterNthNode(head, n, x);
document.write();
document.write("<br/>Linked List After Insertion: ");
printList(head);
// This code contributed by gauravrajput1
</script>
OutputOriginal Linked List: 1 3 4 5
Linked List After Insertion: 1 2 3 4 5
Time Complexity: O(n), where n is the number of nodes in the list.
Auxiliary Space: O(1)
Method 2 (Single traversal): This method uses two pointers, one is slow_ptr and the other is fast_ptr. First move the fast_ptr up to the nth node from the beginning. Make the slow_ptr point to the 1st node of the list. Now, simultaneously move both the pointers until fast_ptr points to the last node. At this point the slow_ptr will be pointing to the nth node from the end. Insert the new node after this node. This method requires single traversal of the list.
Implementation:
C++
// C++ implementation to insert a node after the
// nth node from the end
#include <bits/stdc++.h>
using namespace std;
// structure of a node
struct Node {
int data;
Node* next;
};
// function to get a new node
Node* getNode(int data)
{
// allocate memory for the node
Node* newNode = (Node*)malloc(sizeof(Node));
// put in the data
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// function to insert a node after the
// nth node from the end
void insertAfterNthNode(Node* head, int n, int x)
{
// if list is empty
if (head == NULL)
return;
// get a new node for the value 'x'
Node* newNode = getNode(x);
// Initializing the slow and fast pointers
Node* slow_ptr = head;
Node* fast_ptr = head;
// move 'fast_ptr' to point to the nth node
// from the beginning
for (int i = 1; i <= n - 1; i++)
fast_ptr = fast_ptr->next;
// iterate until 'fast_ptr' points to the
// last node
while (fast_ptr->next != NULL) {
// move both the pointers to the
// respective next nodes
slow_ptr = slow_ptr->next;
fast_ptr = fast_ptr->next;
}
// insert the 'newNode' by making the
// necessary adjustment in the links
newNode->next = slow_ptr->next;
slow_ptr->next = newNode;
}
// function to print the list
void printList(Node* head)
{
while (head != NULL) {
cout << head->data << " ";
head = head->next;
}
}
// Driver program to test above
int main()
{
// Creating list 1->3->4->5
Node* head = getNode(1);
head->next = getNode(3);
head->next->next = getNode(4);
head->next->next->next = getNode(5);
int n = 4, x = 2;
cout << "Original Linked List: ";
printList(head);
insertAfterNthNode(head, n, x);
cout << "\nLinked List After Insertion: ";
printList(head);
return 0;
}
Java
// Java implementation to
// insert a node after the
// nth node from the end
class GfG
{
// structure of a node
static class Node
{
int data;
Node next;
}
// function to get a new node
static Node getNode(int data)
{
// allocate memory for the node
Node newNode = new Node();
// put in the data
newNode.data = data;
newNode.next = null;
return newNode;
}
// function to insert a node after
// the nth node from the end
static void insertAfterNthNode(Node head,
int n, int x)
{
// if list is empty
if (head == null)
return;
// get a new node for the value 'x'
Node newNode = getNode(x);
// Initializing the slow
// and fast pointers
Node slow_ptr = head;
Node fast_ptr = head;
// move 'fast_ptr' to point to the
// nth node from the beginning
for (int i = 1; i <= n - 1; i++)
fast_ptr = fast_ptr.next;
// iterate until 'fast_ptr' points
// to the last node
while (fast_ptr.next != null)
{
// move both the pointers to the
// respective next nodes
slow_ptr = slow_ptr.next;
fast_ptr = fast_ptr.next;
}
// insert the 'newNode' by making the
// necessary adjustment in the links
newNode.next = slow_ptr.next;
slow_ptr.next = newNode;
}
// function to print the list
static void printList(Node head)
{
while (head != null)
{
System.out.print(head.data + " ");
head = head.next;
}
}
// Driver code
public static void main(String[] args)
{
// Creating list 1->3->4->5
Node head = getNode(1);
head.next = getNode(3);
head.next.next = getNode(4);
head.next.next.next = getNode(5);
int n = 4, x = 2;
System.out.println("Original Linked List: ");
printList(head);
insertAfterNthNode(head, n, x);
System.out.println();
System.out.println("Linked List After Insertion: ");
printList(head);
}
}
// This code is contributed by
// Prerna Saini.
Python3
# Python3 implementation to insert a
# node after the nth node from the end
# Structure of a node
class Node:
def __init__(self, data):
self.data = data
self.next = None
# Function to get a new node
def getNode(data):
# Allocate memory for the node
newNode = Node(data)
return newNode
# Function to insert a node after the
# nth node from the end
def insertAfterNthNode(head, n, x):
# If list is empty
if (head == None):
return
# Get a new node for the value 'x'
newNode = getNode(x)
# Initializing the slow and fast pointers
slow_ptr = head
fast_ptr = head
# Move 'fast_ptr' to point to the nth
# node from the beginning
for i in range(1, n):
fast_ptr = fast_ptr.next
# Iterate until 'fast_ptr' points to the
# last node
while (fast_ptr.next != None):
# Move both the pointers to the
# respective next nodes
slow_ptr = slow_ptr.next
fast_ptr = fast_ptr.next
# Insert the 'newNode' by making the
# necessary adjustment in the links
newNode.next = slow_ptr.next
slow_ptr.next = newNode
# Function to print the list
def printList(head):
while (head != None):
print(head.data, end = ' ')
head = head.next
# Driver code
if __name__=='__main__':
# Creating list 1.3.4.5
head = getNode(1)
head.next = getNode(3)
head.next.next = getNode(4)
head.next.next.next = getNode(5)
n = 4
x = 2
print("Original Linked List: ", end = '')
printList(head)
insertAfterNthNode(head, n, x)
print("\nLinked List After Insertion: ", end = '')
printList(head)
# This code is contributed by rutvik_56
C#
// C# implementation to
// insert a node after the
// nth node from the end
using System;
class GfG
{
// structure of a node
public class Node
{
public int data;
public Node next;
}
// function to get a new node
static Node getNode(int data)
{
// allocate memory for the node
Node newNode = new Node();
// put in the data
newNode.data = data;
newNode.next = null;
return newNode;
}
// function to insert a node after
// the nth node from the end
static void insertAfterNthNode(Node head,
int n, int x)
{
// if list is empty
if (head == null)
return;
// get a new node for the value 'x'
Node newNode = getNode(x);
// Initializing the slow
// and fast pointers
Node slow_ptr = head;
Node fast_ptr = head;
// move 'fast_ptr' to point to the
// nth node from the beginning
for (int i = 1; i <= n - 1; i++)
fast_ptr = fast_ptr.next;
// iterate until 'fast_ptr' points
// to the last node
while (fast_ptr.next != null)
{
// move both the pointers to the
// respective next nodes
slow_ptr = slow_ptr.next;
fast_ptr = fast_ptr.next;
}
// insert the 'newNode' by making the
// necessary adjustment in the links
newNode.next = slow_ptr.next;
slow_ptr.next = newNode;
}
// function to print the list
static void printList(Node head)
{
while (head != null)
{
Console.Write(head.data + " ");
head = head.next;
}
}
// Driver code
public static void Main()
{
// Creating list 1->3->4->5
Node head = getNode(1);
head.next = getNode(3);
head.next.next = getNode(4);
head.next.next.next = getNode(5);
int n = 4, x = 2;
Console.WriteLine("Original Linked List: ");
printList(head);
insertAfterNthNode(head, n, x);
Console.WriteLine();
Console.WriteLine("Linked List After Insertion: ");
printList(head);
}
}
/* This code contributed by PrinciRaj1992 */
JavaScript
<script>
// JavaScript implementation to
// insert a node after the
// nth node from the end
// structure of a node
class Node {
constructor() {
this.data = 0;
this.next = null;
}
}
// function to get a new node
function getNode(data) {
// allocate memory for the node
var newNode = new Node();
// put in the data
newNode.data = data;
newNode.next = null;
return newNode;
}
// function to insert a node after
// the nth node from the end
function insertAfterNthNode(head, n, x) {
// if list is empty
if (head == null) return;
// get a new node for the value 'x'
var newNode = getNode(x);
// Initializing the slow
// and fast pointers
var slow_ptr = head;
var fast_ptr = head;
// move 'fast_ptr' to point to the
// nth node from the beginning
for (var i = 1; i <= n - 1; i++)
fast_ptr = fast_ptr.next;
// iterate until 'fast_ptr' points
// to the last node
while (fast_ptr.next != null) {
// move both the pointers to the
// respective next nodes
slow_ptr = slow_ptr.next;
fast_ptr = fast_ptr.next;
}
// insert the 'newNode' by making the
// necessary adjustment in the links
newNode.next = slow_ptr.next;
slow_ptr.next = newNode;
}
// function to print the list
function printList(head) {
while (head != null) {
document.write(head.data + " ");
head = head.next;
}
}
// Driver code
// Creating list 1->3->4->5
var head = getNode(1);
head.next = getNode(3);
head.next.next = getNode(4);
head.next.next.next = getNode(5);
var n = 4,
x = 2;
document.write("Original Linked List: ");
printList(head);
insertAfterNthNode(head, n, x);
document.write("<br>");
document.write("Linked List After Insertion:");
printList(head);
</script>
OutputOriginal Linked List: 1 3 4 5
Linked List After Insertion: 1 2 3 4 5
Time Complexity: O(n), where n is the number of nodes in the list.
Auxiliary Space: O(1)
Method 3 (Recursive Approach):
- Traverse the list recursively till we reach the last node.
- while back tracking insert the node at desired position.
Implementation:
C++
// C++ implementation to insert a node after the
// nth node from the end
#include <bits/stdc++.h>
using namespace std;
// structure of a node
struct Node {
int data;
Node* next;
};
// function to get a new node
Node* getNode(int data)
{
// allocate memory for the node
Node* newNode = new Node();
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// function to insert a node after the
// nth node from the end
void insertAfterNthNode(Node* head, int x, int& n)
{
// Base case
if (head == NULL)
return;
// recursively traverse till the last node
insertAfterNthNode(head->next, x, n);
// condition to insert the node after nth node from end
if (--n == 0) {
// create a node with the given value
Node* temp = getNode(x);
// update the next pointer to point next node in the
// list
temp->next = head->next;
// make sure head points to newly inserted node
head->next = temp;
}
}
// function to print the list
void printList(Node* head)
{
while (head != NULL) {
cout << head->data << " ";
head = head->next;
}
}
// Driver program to test above functions
int main()
{
// Creating list 1->3->4->5
Node* head = getNode(1);
head->next = getNode(3);
head->next->next = getNode(4);
head->next->next->next = getNode(5);
int n = 4, x = 2;
cout << "Original Linked List: ";
printList(head);
insertAfterNthNode(head, x, n);
cout << "\nLinked List After Insertion: ";
printList(head);
return 0;
}
// This code is contributed by Upendra
Java
// Java implementation to insert a node after the
// nth node from the end
class GfG {
// structure of a node
static class Node {
int data;
Node next;
}
// function to get a new node
static Node getNode(int data)
{
// allocate memory for the node
Node newNode = new Node();
// put in the data
newNode.data = data;
newNode.next = null;
return newNode;
}
static int n;
// function to insert a node after the
// nth node from the end
static void insertAfterNthNode(Node head, int x)
{
// Base case
if (head == null)
return;
// recursively traverse till the last node
insertAfterNthNode(head.next, x);
// condition to insert the node after nth node from
// end
if (--n == 0) {
// create a node with the given value
Node temp = getNode(x);
// update the next pointer to point next node in
// the list
temp.next = head.next;
// make sure head points to newly inserted node
head.next = temp;
}
}
// function to print the list
static void printList(Node head)
{
while (head != null) {
System.out.print(head.data + " ");
head = head.next;
}
}
// Driver code
public static void main(String[] args)
{
// Creating list 1->3->4->5
Node head = getNode(1);
head.next = getNode(3);
head.next.next = getNode(4);
head.next.next.next = getNode(5);
n = 4;
int x = 2;
System.out.println("Original Linked List: ");
printList(head);
insertAfterNthNode(head, x);
System.out.println();
System.out.println("Linked List After Insertion: ");
printList(head);
}
}
// This code is contributed by Abhijeet Kumar(abhijeet19403)
Python3
# Python implementation to insert a node after the
# nth node from the end
class Node:
def __init__(self,data):
self.data = data
self.next = None
# function to get a new node
def getNode(data):
newNode = Node(data)
return newNode
# function to insert a node after the
# nth node from the end
def insertAfterNthNode(head,x,n):
# Base Case
if head == None:
return n-1
# recursively traverse till the last node
n = insertAfterNthNode(head.next,x,n)
# condition to insert the node after nth node from end
if n == 0:
# create a node with the given value
temp = getNode(x)
# update the next pointer to point next node in the list
temp.next = head.next
# make sure head points to newly inserted node
head.next = temp
return n-1
# function to print the list
def printList(head):
while head != None:
print(head.data,end = ' ')
head = head.next
print()
# Driver program to test above functions
# Creating list 1->3->4->5
head = getNode(1)
head.next = getNode(3)
head.next.next = getNode(4)
head.next.next.next = getNode(5)
n = 4
x = 2
print("Original Linked List: ")
printList(head)
insertAfterNthNode(head, x, n)
print("Linked List After Insertion: ")
printList(head)
C#
// C# implementation to insert a node after the
// nth node from the end
using System;
public class GFG {
// structure of a node
class Node {
public int data;
public Node next;
}
// function to get a new node
static Node getNode(int data)
{
// allocate memory for the node
Node newNode = new Node();
// put in the data
newNode.data = data;
newNode.next = null;
return newNode;
}
static int n;
// function to insert a node after the
// nth node from the end
static void insertAfterNthNode(Node head, int x)
{
// Base case
if (head == null)
return;
// recursively traverse till the last node
insertAfterNthNode(head.next, x);
// condition to insert the node after nth node from
// end
if (--n == 0) {
// create a node with the given value
Node temp = getNode(x);
// update the next pointer to point next node in
// the list
temp.next = head.next;
// make sure head points to newly inserted node
head.next = temp;
}
}
// function to print the list
static void printList(Node head)
{
while (head != null) {
Console.Write(head.data + " ");
head = head.next;
}
}
static public void Main()
{
// Code
// Creating list 1->3->4->5
Node head = getNode(1);
head.next = getNode(3);
head.next.next = getNode(4);
head.next.next.next = getNode(5);
n = 4;
int x = 2;
Console.Write("Original Linked List: ");
printList(head);
insertAfterNthNode(head, x);
Console.WriteLine();
Console.Write("Linked List After Insertion: ");
printList(head);
}
}
// This code is contributed by lokesh.
JavaScript
// JavaScript implementation to insert a node after the
// nth node from the end
// structure of a node
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
let n;
// function to insert a node after the
// nth node from the end
function insertAfterNthNode(head, x) {
// base case
if (head == null) return;
// recursively traverse till the last node
insertAfterNthNode(head.next, x);
// condition to insert the node after nth node from end
if (--n == 0) {
// create a node with the given value
let temp = new Node(x);
// update the next pointer to point to the next node in the list
temp.next = head.next;
// make sure head points to the newly inserted node
head.next = temp;
}
}
// function to print the list
function printList(head) {
let current = head;
while (current != null) {
console.log(current.data + " ");
current = current.next;
}
console.log("<br>");
}
// create a linked list: 1 -> 3 -> 4 -> 5
let head = new Node(1);
head.next = new Node(3);
head.next.next = new Node(4);
head.next.next.next = new Node(5);
n = 4;
let x = 2;
console.log("Original Linked List: ");
printList(head);
insertAfterNthNode(head, x);
console.log("\nLinked List After Insertion: ");
printList(head);
// This code is contributed by lokeshmvs21.
OutputOriginal Linked List: 1 3 4 5
Linked List After Insertion: 1 2 3 4 5
Time Complexity: O(n)
Where n is the number of nodes in the list.
Auxiliary Space: O(n)
Due to recursion call stack.
Similar Reads
Javascript Program For Inserting A Node After The N-th Node From The End Insert a node x after the nth node from the end in the given singly linked list. It is guaranteed that the list contains the nth node from the end. Also 1 <= n.Examples: Input : list: 1->3->4->5 n = 4, x = 2 Output : 1->2->3->4->5 4th node from the end is 1 and insertion has
5 min read
Delete Nth node from the end of the given linked list Given a linked list and an integer N, the task is to delete the Nth node from the end of the given linked list.Examples: Input: 2 -> 3 -> 1 -> 7 -> NULL, N = 1 Output: 2 3 1Explanation: The created linked list is: 2 3 1 7 The linked list after deletion is: 2 3 1Input: 1 -> 2 -> 3 -
10 min read
Insert Node at the End of a Linked List Given a linked list, the task is to insert a new node at the end of the linked list.Examples:Input: LinkedList = 2 -> 3 -> 4 -> 5, NewNode = 1Output: LinkedList = 2 -> 3 -> 4 -> 5 -> 1Input: LinkedList = NULL, NewNode = 1Output: LinkedList = 1Approach:Â Inserting at the end invol
9 min read
Insert a Node after a given Node in Linked List Given a linked list, the task is to insert a new node after a given node of the linked list. If the given node is not present in the linked list, print "Node not found".Examples:Input: LinkedList = 2 -> 3 -> 4 -> 5, newData = 1, key = 2Output: LinkedList = 2 -> 1 -> 3 -> 4 -> 5I
11 min read
XOR Linked List - Find Nth Node from the end Given a XOR linked list and an integer N, the task is to print the Nth node from the end of the given XOR linked list. Examples: Input: 4 â> 6 â> 7 â> 3, N = 1 Output: 3 Explanation: 1st node from the end is 3.Input: 5 â> 8 â> 9, N = 4 Output: Wrong Input Explanation: The given Xor Li
15+ min read
Remove Nth node from end of the Linked List Given a linked list. The task is to remove the Nth node from the end of the linked list.Examples: Input : LinkedList = 1 ->2 ->3 ->4 ->5 , N = 2Output : 1 ->2 ->3 ->5Explanation: Linked list after deleting the 2nd node from last which is 4, is 1 ->2 ->3 ->5 Input : Link
15+ min read