标签:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Subscribe to see which companies asked this question
思路:归并排序
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeKLists(vector<ListNode*>& lists) { if(lists.size() == 0) return NULL; return mergeSort(lists,0,lists.size()-1); } ListNode *mergeSort(vector<ListNode*>& lists, int s, int e){ if(s==e) return lists[s]; else { int mid = (s+e)>>1; ListNode *l1 = mergeSort(lists,s,mid); ListNode *l2 = mergeSort(lists,mid+1,e); return merge(l1,l2); } } ListNode *merge(ListNode *l1, ListNode *l2){ if(l1==NULL) return l2; if(l2==NULL) return l1; ListNode dummy(0); ListNode *p = &dummy; while(l1 && l2){ if(l1->val < l2->val){ p->next = l1; l1=l1->next; } else { p->next = l2; l2=l2->next; } p = p->next; } p->next = l1!=NULL?l1:l2; return dummy.next; } };
标签:
原文地址:http://blog.csdn.net/itismelzp/article/details/51167618