Merge k Sorted Lists
Problem
You are given an array of k
linked-lists lists
, each linked-list is sorted in ascending order.
Merge all the linked-lists into one sorted linked-list and return it.
Solution Approach
First Merge two linked list and merge the third with resultant of the first two and so on.
Expected Time complexity:
Click - to see solution code
- C++
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if (list1 == NULL) return list2;
if (list2 == NULL) return list1;
if (list1->val > list2->val) swap(list1, list2);
ListNode *head;
head = (ListNode*)malloc(sizeof(ListNode*));
head = list1;
while (list1->next != NULL && list2 != NULL) {
if (list1->next->val <= list2->val) {
list1 = list1->next;
continue;
}
ListNode *temp;
temp = (ListNode*)malloc(sizeof(ListNode*));
temp = list2;
list2 = list2->next;
temp->next = list1->next;
list1->next = temp;
list1 = list1->next;
}
if (list2 != NULL) {
list1->next = list2;
}
return head;
}
ListNode* mergeKLists(vector<ListNode*>& lists) {
ListNode *head;
head = (ListNode*)malloc(sizeof(ListNode*));
if (lists.size() == 0) {
head = NULL;
return head;
}
head = lists[0];
for (int i = 1; i < lists.size(); i++) {
head = mergeTwoLists(head, lists[i]);
}
return head;
}
};