Skip to content

Commit ede9087

Browse files
committed
Merge K sorted linked lists
1 parent 5048a71 commit ede9087

File tree

2 files changed

+130
-0
lines changed

2 files changed

+130
-0
lines changed

Heaps/MergeKSortedLinkedLists.cpp

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
// { Driver Code Starts
2+
// C++ program to merge k sorted arrays of size n each
3+
#include <bits/stdc++.h>
4+
using namespace std;
5+
6+
// A Linked List node
7+
struct Node
8+
{
9+
int data;
10+
Node* next;
11+
12+
Node(int x){
13+
data = x;
14+
next = NULL;
15+
}
16+
17+
};
18+
19+
/* Function to print nodes in a given linked list */
20+
void printList(Node* node)
21+
{
22+
while (node != NULL)
23+
{
24+
printf("%d ", node->data);
25+
node = node->next;
26+
}
27+
cout<<endl;
28+
}
29+
30+
// } Driver Code Ends
31+
/*Linked list Node structure
32+
33+
struct Node
34+
{
35+
int data;
36+
Node* next;
37+
38+
Node(int x){
39+
data = x;
40+
next = NULL;
41+
}
42+
43+
};
44+
*/
45+
46+
class Solution{
47+
public:
48+
Node* merge(Node* node1, Node* node2)
49+
{
50+
if(!node1)
51+
return node2;
52+
if(!node2)
53+
return node1;
54+
if(node1->data < node2->data)
55+
{
56+
node1->next = merge(node1->next, node2);
57+
return node1;
58+
}
59+
else
60+
{
61+
node2->next = merge(node1, node2->next);
62+
return node2;
63+
}
64+
}
65+
//Function to merge K sorted linked list.
66+
Node * mergeKLists(Node *arr[], int K)
67+
{
68+
// Your code here
69+
Node* node = NULL;
70+
for(int i = 0 ; i < K ; i++)
71+
node = merge(node, arr[i]);
72+
return node;
73+
}
74+
};
75+
76+
77+
78+
// { Driver Code Starts.
79+
// Driver program to test above functions
80+
int main()
81+
{
82+
int t;
83+
cin>>t;
84+
while(t--)
85+
{
86+
int N;
87+
cin>>N;
88+
struct Node *arr[N];
89+
for(int j=0;j<N;j++)
90+
{
91+
int n;
92+
cin>>n;
93+
94+
int x;
95+
cin>>x;
96+
arr[j]=new Node(x);
97+
Node *curr = arr[j];
98+
n--;
99+
100+
for(int i=0;i<n;i++)
101+
{
102+
cin>>x;
103+
Node *temp = new Node(x);
104+
curr->next =temp;
105+
curr=temp;
106+
}
107+
}
108+
Solution obj;
109+
Node *res = obj.mergeKLists(arr,N);
110+
printList(res);
111+
112+
}
113+
114+
return 0;
115+
}
116+
// } Driver Code Ends

Heaps/README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,17 @@
5858
extractMin() since the heap is empty thus
5959
no min element exist so -1
6060
is printed.
61+
62+
## 5. Merge K Sorted Linked Lists:
63+
Given K sorted linked lists of different sizes. The task is to merge them in such a way that after merging they will be a single sorted linked list.
64+
Example 1:
65+
Input:
66+
K = 4
67+
value = {{1,2,3},{4 5},{5 6},{7,8}}
68+
Output: 1 2 3 4 5 5 6 7 8
69+
Explanation: The test case has 4 sorted linked list of size 3, 2, 2, 2
70+
1st list 1 -> 2-> 3
71+
2nd list 4->5
72+
3rd list 5->6
73+
4th list 7->8
74+
The merged list will be 1->2->3->4->5->5->6->7->8.

0 commit comments

Comments
 (0)