Merge k Sorted Lists
Total Accepted: 82424 Total
Submissions: 354076 Difficulty: Hard
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
Hide Similar Problems
思路:
归并排序,与数组归并排序类似
/** * 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; } };