Insert a whole linked list into other at k-th position
Last Updated :
01 Sep, 2022
Given two linked lists and a number k. Insert second linked list in to first at k-th position
Examples:
Input : a : 1->2->3->4->5->NULL
b : 7->8->9->10->11->NULL
k = 2
Output :1->2->7->8->9->10->11->3->4->5->NULL
Input : a: 10->15->20->NULL
b: 11->17->16->18->NULL
k = 3
Output : 10->15->20->11->17->16->18->NULL
A pictorial representation of the problem

- Traverse the first linked list till k-th point
- Join second linked list head node to k-th point of first linked list
- Traverse the second linked list till end at
- Add (k+1)th point of first linked list to the end of the second linked list
Implementation:
C++
// A C++ program to insert a linked list in
// to another linked list at position k
#include <bits/stdc++.h>
using namespace std;
/* Structure for a linked list node */
struct Node {
int data;
struct Node* next;
};
// Function to insert whole linked list in
// to another linked list at position k
void insert(struct Node* head1, struct Node* head2,
int k)
{
// traverse the first linked list until k-th
// point is reached
int count = 1;
struct Node* curr = head1;
while (count < k) {
curr = curr->next;
count++;
}
// backup next node of the k-th point
struct Node* temp = curr->next;
// join second linked list at the kth point
curr->next = head2;
// traverse the second linked list till end
while (head2->next != NULL)
head2 = head2->next;
// join the second part of the linked list
// to the end
head2->next = temp;
}
// Function to print linked list recursively
void printList(Node* head)
{
if (head == NULL)
return;
// If head is not NULL, print current node
// and recur for remaining list
cout << head->data << " ";
printList(head->next);
}
/* Given a reference (pointer to pointer) to the head
of a list and an int, insert a new node on the front
of the list. */
void push(struct Node** head_ref, int new_data)
{
struct Node* new_node = new Node;
new_node->data = new_data;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
/* Driven program to test above function */
int main()
{
/* The constructed linked lists are :
a: 1->2->3->4->5;
b: 7->8->9->10->11 */
struct Node* a = NULL;
struct Node* b = NULL;
int k = 2;
// first linked list
push(&a, 5);
push(&a, 4);
push(&a, 3);
push(&a, 2);
push(&a, 1);
// second linked list
push(&b, 11);
push(&b, 10);
push(&b, 9);
push(&b, 8);
push(&b, 7);
printList(a);
cout << "\n";
printList(b);
insert(a, b, k);
cout << "\nResulting linked list\t";
printList(a);
return 0;
}
Java
// A Java program to insert a linked list in
// to another linked list at position k
class GFG {
// Structure for a linked list node /
static class Node {
int data;
Node next;
};
// Function to insert whole linked list in
// to another linked list at position k
static Node insert(Node head1, Node head2,
int k)
{
// traverse the first linked list until k-th
// point is reached
int count = 1;
Node curr = head1;
while (count < k) {
curr = curr.next;
count++;
}
// backup next node of the k-th point
Node temp = curr.next;
// join second linked list at the kth point
curr.next = head2;
// traverse the second linked list till end
while (head2.next != null)
head2 = head2.next;
// join the second part of the linked list
// to the end
head2.next = temp;
return head1;
}
// Function to print linked list recursively
static void printList(Node head)
{
if (head == null)
return;
// If head is not null, print current node
// and recur for remaining list
System.out.print(head.data + " ");
printList(head.next);
}
// Given a reference (pointer to pointer) to the head
// of a list and an int, insert a new node on the front
// of the list.
static Node push(Node head_ref, int new_data)
{
Node new_node = new Node();
new_node.data = new_data;
new_node.next = (head_ref);
(head_ref) = new_node;
return head_ref;
}
// Driven code
public static void main(String args[])
{
// The constructed linked lists are :
// a: 1.2.3.4.5;
// b: 7.8.9.10.11
Node a = null;
Node b = null;
int k = 2;
// first linked list
a = push(a, 5);
a = push(a, 4);
a = push(a, 3);
a = push(a, 2);
a = push(a, 1);
// second linked list
b = push(b, 11);
b = push(b, 10);
b = push(b, 9);
b = push(b, 8);
b = push(b, 7);
printList(a);
System.out.println();
printList(b);
a = insert(a, b, k);
System.out.print("\nResulting linked list\t");
printList(a);
}
}
// This code is contributed by Arnab Kundu
Python3
# A Python3 program to insert a linked list in
# to another linked list at position k
# Node of the single linked list
class Node:
def __init__(self, data):
self.data = data
self.next = None
# Function to insert whole linked list in
# to another linked list at position k
def insert(head1, head2, k):
# traverse the first linked list until k-th
# point is reached
count = 1
curr = head1
while (count < k):
curr = curr.next
count += 1
# backup next node of the k-th point
temp = curr.next
# join second linked list at the kth point
curr.next = head2
# traverse the second linked list till end
while (head2.next != None):
head2 = head2.next
# join the second part of the linked list
# to the end
head2.next = temp
return head1
# Function to print linked list recursively
def printList(head):
if (head == None):
return
# If head is not None, print current node
# and recur for remaining list
print( head.data, end = " ")
printList(head.next)
""" Given a reference (pointer to pointer) to the head
of a list and an int, insert a new node on the front
of the list. """
def push(head_ref, new_data):
new_node = Node(0)
new_node.data = new_data
new_node.next = (head_ref)
(head_ref) = new_node
return head_ref
# Driver Code
if __name__ == "__main__":
""" The constructed linked lists are :
a: 1.2.3.4.5
b: 7.8.9.10.11 """
a = None
b = None
k = 2
# first linked list
a = push(a, 5)
a = push(a, 4)
a = push(a, 3)
a = push(a, 2)
a = push(a, 1)
# second linked list
b = push(b, 11)
b = push(b, 10)
b = push(b, 9)
b = push(b, 8)
b = push(b, 7)
printList(a)
print()
printList(b)
a = insert(a, b, k)
print("\nResulting linked list\t", end = " ");
printList(a)
# This code is contributed by Arnab Kundu
C#
// A C# program to insert a linked list in
// to another linked list at position k
using System;
class GFG {
// Structure for a linked list node /
public class Node {
public int data;
public Node next;
};
// Function to insert whole linked list in
// to another linked list at position k
static Node insert(Node head1, Node head2,
int k)
{
// traverse the first linked list until k-th
// point is reached
int count = 1;
Node curr = head1;
while (count < k) {
curr = curr.next;
count++;
}
// backup next node of the k-th point
Node temp = curr.next;
// join second linked list at the kth point
curr.next = head2;
// traverse the second linked list till end
while (head2.next != null)
head2 = head2.next;
// join the second part of the linked list
// to the end
head2.next = temp;
return head1;
}
// Function to print linked list recursively
static void printList(Node head)
{
if (head == null)
return;
// If head is not null, print current node
// and recur for remaining list
Console.Write(head.data + " ");
printList(head.next);
}
// Given a reference (pointer to pointer) to the head
// of a list and an int, insert a new node on the front
// of the list.
static Node push(Node head_ref, int new_data)
{
Node new_node = new Node();
new_node.data = new_data;
new_node.next = (head_ref);
(head_ref) = new_node;
return head_ref;
}
// Driven code
public static void Main(String[] args)
{
// The constructed linked lists are :
// a: 1.2.3.4.5;
// b: 7.8.9.10.11
Node a = null;
Node b = null;
int k = 2;
// first linked list
a = push(a, 5);
a = push(a, 4);
a = push(a, 3);
a = push(a, 2);
a = push(a, 1);
// second linked list
b = push(b, 11);
b = push(b, 10);
b = push(b, 9);
b = push(b, 8);
b = push(b, 7);
printList(a);
Console.WriteLine();
printList(b);
a = insert(a, b, k);
Console.Write("\nResulting linked list\t");
printList(a);
}
}
// This code contributed by Rajput-Ji
JavaScript
<script>
// A Javascript program to insert a linked list in
// to another linked list at position k
// Structure for a linked list node /
class Node {
constructor()
{
this.data = 0;
this.next = null;
}
};
// Function to insert whole linked list in
// to another linked list at position k
function insert(head1, head2, k)
{
// traverse the first linked list until k-th
// point is reached
var count = 1;
var curr = head1;
while (count < k) {
curr = curr.next;
count++;
}
// backup next node of the k-th point
var temp = curr.next;
// join second linked list at the kth point
curr.next = head2;
// traverse the second linked list till end
while (head2.next != null)
head2 = head2.next;
// join the second part of the linked list
// to the end
head2.next = temp;
return head1;
}
// Function to print linked list recursively
function printList(head)
{
if (head == null)
return;
// If head is not null, print current node
// and recur for remaining list
document.write(head.data + " ");
printList(head.next);
}
// Given a reference (pointer to pointer) to the head
// of a list and an int, insert a new node on the front
// of the list.
function push(head_ref, new_data)
{
var new_node = new Node();
new_node.data = new_data;
new_node.next = (head_ref);
(head_ref) = new_node;
return head_ref;
}
// Driven code
// The constructed linked lists are :
// a: 1.2.3.4.5;
// b: 7.8.9.10.11
var a = null;
var b = null;
var k = 2;
// first linked list
a = push(a, 5);
a = push(a, 4);
a = push(a, 3);
a = push(a, 2);
a = push(a, 1);
// second linked list
b = push(b, 11);
b = push(b, 10);
b = push(b, 9);
b = push(b, 8);
b = push(b, 7);
printList(a);
document.write("<br>");
printList(b);
a = insert(a, b, k);
document.write("<br>Resulting linked list ");
printList(a);
</script>
Output:
1 2 3 4 5
7 8 9 10 11
Resulting linked list 1 2 7 8 9 10 11 3 4 5
Time Complexity: O(k+n), as we are using a loop to traverse second linked list n times. Where n is the number of nodes in the second linked list to be inserted. and kth position in first linked list
Auxiliary Space: O(1) because it is using constant space
Insert a whole linked list into other at k-th position
Similar Reads
Make a loop at k-th position in a linked list Given a linked list and a position k. Make a loop at k-th position Examples: Input : Given linked list Output : Modified linked list Algorithm: Traverse the first linked list till k-th point Make backup of the k-th node Traverse the linked list till end Attach the last node with k-th node Implementa
8 min read
Insert a node at a specific position in a linked list Given a singly linked list, a position pos, and data, the task is to insert that data into a linked list at the given position. Examples:Input: 3->5->8->10, data = 2, pos = 2Output: 3->2->5->8->10Input: 3->5->8->10, data = 11, pos = 5Output: 3->5->8->10->11
8 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 node into the middle of the linked list Given a linked list containing n nodes. The problem is to insert a new node with data x in the middle of the list. If n is even, then insert the new node after the (n/2)th node, else insert the new node after the (n+1)/2th node.Examples: Input: LinkedList = 1->2->4 , x = 3Output: 1->2->3
14 min read
Merge a linked list into another linked list at alternate positions Given two singly linked lists, The task is to insert nodes of the second list into the first list at alternate positions of the first list and leave the remaining nodes of the second list if it is longer.Example:Input: head1: 1->2->3 , head2: 4->5->6->7->8Output: head1: 1->4-
8 min read
Insert a linked list into another linked list Given two linked lists, head1 and head2 of sizes m and n respectively. The task is to remove head1's nodes from the ath node to the bth node and insert head2 in their place.Examples:Input: a = 3, b = 4head1: 10 -> 11 -> 12 -> 13 -> 14 -> 15, head2: 100 -> 101 -> 102 -> 103Out
10 min read