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

Given two linked list 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 ## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 `

Output:

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

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : andrew1234, Rajput-Ji

Article Tags :
Practice Tags :

2

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.