23. Merge k Sorted Lists | LeetCode Daily Challenge | LeetCode POTD

preview_player
Показать описание

0:00​ - Question Understanding
1:34 - Approach 1
3:20 - Approach 2
6:50 - Approach 3

#coding #dsa #leetcode #daily #programming #cpp #tutorial
Рекомендации по теме
Комментарии
Автор

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeList(ListNode *p, ListNode *q) {
ListNode *start = new ListNode(-1);
ListNode *head = new ListNode;
head = start;
while (p && q) {
if (p->val > q->val) {
start->next = q;
q = q->next;
}
else {
start->next = p;
p = p->next;
}
start = start->next;
}
while(p) {
start->next = p;
start = start->next;
p = p->next;
}
while(q) {
start->next = q;
start = start->next;
q = q->next;
}
return head->next;
}

ListNode* lists) {
if (lists.size() == 0)
return NULL;

ListNode *head = new ListNode;
head = lists[0];

for (int i = 1; i < lists.size(); i++) {
head = mergeList(lists[i], head);
}

return head;
}
};

deepcodes
Автор

hi there!, thank you fo r your daily tutorials, I just wanted to ask why you initialized start as (-1) in second approach?

zhansayazholdybai
Автор

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* merge(ListNode *left, ListNode *right) {
ListNode *dummy = new ListNode(-1);
ListNode *temp = dummy;
while (left != nullptr && right != nullptr) {
if (left -> val < right -> val) {
temp -> next = left;
temp = temp -> next;
left = left -> next;
}
else {
temp -> next = right;
temp = temp -> next;
right = right -> next;
}
}
while (left != nullptr) {
temp -> next = left;
temp = temp -> next;
left = left -> next;
}
while (right != nullptr) {
temp -> next = right;
temp = temp -> next;
right = right -> next;
}
return dummy -> next;
}
ListNode* mergeSort(vector<ListNode*>& lists, int start, int end) {
if (start == end)
return lists[start];
int mid = start + (end - start) / 2;
ListNode *left = mergeSort(lists, start, mid);
ListNode *right = mergeSort(lists, mid + 1, end);
return merge(left, right);
}
ListNode* lists) {
if (lists.size() == 0)
return nullptr;
return mergeSort(lists, 0, lists.size() - 1);
}
};

deepcodes