归并排序 + 合并两个有序链表,简单易理解
合并k个已排序的链表
http://www.nowcoder.com/questionTerminal/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
class Solution { public: ListNode* help(ListNode* a, ListNode* b){ if(a == nullptr || b == nullptr) return a == nullptr ? b : a; ListNode* head, *last, *i, *j; if(b->val > a->val){head = last = a; i = a->next; j = b;} else {head = last = b; i = a; j = b->next;} while(i != nullptr && j != nullptr){ if(i->val < j->val){last->next = i; i = i->next;} else{last->next = j; j = j->next;} last = last->next; } last->next = i == nullptr ? j : i; return head; } ListNode* merge(vector<ListNode*> lists, int l, int r){ if(l > r) return nullptr; if(l == r) return lists[l]; auto i = merge(lists, l, (l + r) / 2); auto j = merge(lists, (l + r) / 2 + 1, r); return help(i, j); } ListNode *mergeKLists(vector<ListNode *> &lists) { int size = lists.size(); if(size == 0) return nullptr; if(size == 1) return lists[0]; return merge(lists, 0, size - 1); } };