Related Articles

# Insert a whole linked list into other at k-th position

• Difficulty Level : Easy
• Last Updated : 22 Jun, 2021

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 1) Traverse the first linked list till k-th point
3) Traverse the second linked list till end at

## C++

 `// A C++ program to insert a linked list in``// to another linked list at position k``#include ``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

 ``

Output:

```1 2 3 4 5
7 8 9 10 11
Resulting linked list    1 2 7 8 9 10 11 3 4 5 ```

https://youtu.be/lOQ

-hZLje2s?list=PLqM7alHXFySH41ZxzrPNj2pAYPOI8ITe7

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 experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up