/**
* 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* mergeKLists(vector<ListNode*>& lists) {
ListNode* ans = nullptr;
for (int i = 0; i < lists.size(); i++) {
ans = mergeTwoList(ans, lists[i]);
}
return ans;
}
ListNode* mergeTwoList(ListNode* p1, ListNode* p2) {
if (!p1 || !p2) {
return p1 ? p1 : p2;
}
ListNode head;
ListNode* h = &head;
ListNode* tail = &head;
ListNode* cur1 = p1;
ListNode* cur2 = p2;
while (cur1 && cur2) {
if (cur1->val < cur2->val) {
tail->next = cur1;
cur1 = cur1->next;
}
else {
tail->next = cur2;
cur2 = cur2->next;
}
tail = tail->next;
}
tail->next = cur1 ? cur1 : cur2;
return h->next;
}
};
合并两个有序链表
最新推荐文章于 2021-04-21 17:56:19 发布