您的位置:首页 > 其它

【LeetCode】23. Merge k Sorted Lists

2017-03-01 14:13 344 查看

【LeetCode】23. Merge k Sorted Lists

【题目描述】

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

【输入输出】

  无

【解题思路】

 分治思想+递归,将链表组均分为两部分分别排序,再对得到的两个链表进行排序。

【代码】

class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
if (lists.empty()) return NULL;
else if (lists.size() == 1) return lists[0];
else {
vector<ListNode*> leftV, rightV;
leftV.assign(lists.begin(), lists.begin() + lists.size() / 2);
rightV.assign(lists.begin() + lists.size() / 2, lists.end());
ListNode* p = mergeKLists(leftV);
ListNode* q = mergeKLists(rightV);
ListNode *ans = NULL, *sortedList = NULL;
while (p || q) {
if (p && q) {
if (!ans) {
sortedList = (p->val <= q->val) ? (new ListNode(p->val)) : (new ListNode(q->val));
ans = sortedList;
}
else {
sortedList->next = (p->val <= q->val) ? (new ListNode(p->val)) : (new ListNode(q->val));
sortedList = sortedList->next;
}
if (p->val <= q->val) p = p->next;
else q = q->next;
}
else if (!p) {
if (!ans) {
sortedList = new ListNode(q->val);
ans = sortedList;
}
else {
sortedList->next = new ListNode(q->val);
sortedList = sortedList->next;
}
q = q->next;
}
else {
if (!ans) {
sortedList = new ListNode(p->val);
ans = sortedList;
}
else {
sortedList->next = new ListNode(p->val);
sortedList = sortedList->next;
}
p = p->next;
}
}
return ans;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode