--- tags: LeetCode,Top 100 Liked Questions --- # 23. Merge k Sorted Lists https://leetcode.com/problems/merge-k-sorted-lists/submissions/ ## 題目敘述 You are given an array of k linked-lists lists, each linked-list is sorted in ascending order. Merge all the linked-lists into one sorted linked-list and return it. ## Example Example 1: ``` Input: lists = [[1,4,5],[1,3,4],[2,6]] Output: [1,1,2,3,4,4,5,6] Explanation: The linked-lists are: [ 1->4->5, 1->3->4, 2->6 ] merging them into one sorted list: 1->1->2->3->4->4->5->6 ``` ## 解題想法 ### 1.Divide And Conquer 利用Divide And Conquer將原本問題變成2個Sorted Lists的merge 並在每次merge完將後面的list刪去 最後當array中只有1個list時即得解 ``` class Solution { public: ListNode* mergenodes(ListNode* l1,ListNode* l2) { ListNode* sorted_node=NULL; if(l1==NULL){ return l2; } else if(l2==NULL){ return l1; } if(l1->val < l2->val){ sorted_node=l1; sorted_node->next= mergenodes(l1->next,l2); } else{ sorted_node=l2; sorted_node->next=mergenodes(l1,l2->next); } return sorted_node; } ListNode* mergeKLists(vector<ListNode*>& lists) { if(lists.size()<1){ return NULL; } int i=0; int j=lists.size()-1; while(j>0){ i=0; j=lists.size()-1; while(i<j){ lists[i]=mergenodes(lists[i],lists[j]); i++; lists.pop_back(); j=lists.size()-1; } } return lists[0]; } }; ``` 時間複雜度為O(N log N)