您的位置:首页 > 其它

LeetCode 23 Merge k Sorted Lists

2018-03-14 08:29 375 查看

LeetCode 23 Merge k Sorted Lists

Description

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

解题思路

可以把第21题两路归并的代码拿过来用。

代码

class Solution {
public:
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
if (l1 == NULL)
return l2;

if (l2 == NULL)
return l1;

ListNode *ans = new ListNode(0);
ListNode *ret = ans;

if (l1->val < l2->val) {
ans->val = l1->val;
l1 = l1->next;
} else {
ans->val = l2->val;
l2 = l2->next;
}

while (l1 != NULL || l2 != NULL) {
if (l2 == NULL || l1 && l2 && l1->val < l2->val) {
ans->next = new ListNode(l1->val);
l1 = l1->next;
} else {
ans->next = new ListNode(l2->val);
l2 = l2->next;
}
ans = ans->next;
}
return ret;
}

ListNode *merge(vector<ListNode *> &lists, int start, int end) {
int size = end - start;
if (size == 2) {
return mergeTwoLists(lists[start], lists[start + 1]);
} else if (size == 1) {
return lists[start];
} else {
int mid = (start + end) / 2;
return mergeTwoLists(merge(lists, start, mid), merge(lists, mid, end));
}
}

ListNode *mergeKLists(vector<ListNode *> &lists) {
return merge(lists, 0, (int) lists.size());
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: