https://leetcode.com/problems/merge-k-sorted-lists/
1. Use Divide and Conquer(two pointers):
//24 ms 12.2 MB/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/class Solution {public:ListNode* mergeKLists(vector<ListNode*>& lists) {if(lists.size()==0) return NULL;if(lists.size()==1) return lists[0];int n = lists.size();int last = n - 1;int l = 0;int r = last;while(l < r){lists[l] = mergeTwoLists(lists[l], lists[r]);l++;r--;if(l>=r){last = r;l = 0;r = last;}}return lists[0];}private:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {ListNode* dummy = new ListNode();ListNode* curr = dummy;while(l1 && l2){if(l1->val < l2->val){curr->next = l1;l1 = l1->next;} else {curr->next = l2;l2 = l2->next;}curr = curr->next;}ListNode* rest = l1 ? l1 : l2;if(rest)curr->next = rest;return dummy->next;}};
