您的位置:首页 > 其它

Merge k Sorted Lists

2015-08-24 00:51 218 查看
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

Solution:

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
bool cmp(const ListNode *a, const ListNode *b)
{
return a->val > b->val;
}

class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
ListNode *lead = new ListNode(-1), *p = lead;
for(auto iter = lists.begin(); iter != lists.end(); )
{
if(*iter == NULL) iter = lists.erase(iter);
else iter++;
}
int len = lists.size();
if(!len) return lead->next;
sort(lists.begin(), lists.end(), cmp);
while(len)
{
p->next = lists[len-1];
lists[len-1] = lists[len-1]->next;
if(!lists[len-1])
{
lists.pop_back();
len--;
}
else adjust(lists);
p = p->next;
}

return lead->next;
}

void adjust(vector<ListNode *> &lists)
{
int len = lists.size();
ListNode *tmp = lists[len-1];
int i = len - 1;
while(--i >= 0)
{
if(lists[i]->val >= tmp->val) break;
else lists[i+1] = lists[i];
}
lists[++i] = tmp;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: