Merge k Sorted Lists

来源:互联网 发布:淘宝快递一直显示揽件 编辑:程序博客网 时间:2024/06/01 08:18

Merge k Sorted Lists

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

 

解题思路:

目的要合并K个sorted Lists,程序建立在合并两个sorted lists。之后采用二分法对K个list进行合并。整个算法过程类似归并排序。

另外:如果直接逐条合并链表,会超时!!

Code:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:ListNode *mergeList(ListNode *l1,ListNode *l2){if(l1==NULL)return l2;if(l2==NULL)return l1;ListNode *head=NULL;ListNode *cur=NULL;ListNode *p=l1;ListNode *q=l2;while(p && q){ListNode *node;if(p->val <q->val){node=p;p=p->next;}else{node=q;q=q->next;}if(head==NULL)head=cur=node;else{cur->next=node;node->next=NULL;cur=node;}}if(p)cur->next=p;else if(q)cur->next=q;return head;}ListNode* helper(vector<ListNode *> &lists,int l,int r){if(l<r){int m=(l+r)/2;return mergeList(helper(lists,l,m),helper(lists,m+1,r));}return lists.at(l);}ListNode *mergeKLists(vector<ListNode *> &lists){if(lists.size()==0)return NULL;return helper(lists,0,lists.size()-1);}};

 

0 0
原创粉丝点击