[LeetCode-23] Merge k Sorted Lists
Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
嗯……没啥好说的……
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *mergeKLists(vector<ListNode *> &lists) { 12 // Start typing your C/C++ solution below 13 // DO NOT write int main() function 14 ListNode* tmp_node = NULL; 15 ListNode* tar_node = NULL; 16 ListNode* new_node = NULL; 17 ListNode* result = NULL; 18 for (int i = 0; i < lists.size(); ++i) { 19 tmp_node = lists[i]; 20 if (NULL == tmp_node) { 21 continue; 22 } 23 if (NULL == result) { 24 result = new ListNode(tmp_node->val); 25 tmp_node = tmp_node->next; 26 } else { 27 if (result->val > tmp_node->val) { 28 new_node = new ListNode(tmp_node->val); 29 new_node->next = result; 30 result = new_node; 31 tmp_node = tmp_node->next; 32 } 33 } 34 tar_node = result; 35 while (tmp_node != NULL) { 36 while (NULL != tar_node->next && tar_node->next->val < tmp_node->val) { 37 tar_node = tar_node->next; 38 } 39 if (NULL == tar_node->next) { 40 new_node = new ListNode(tmp_node->val); 41 tar_node->next = new_node; 42 } else { 43 new_node = new ListNode(tmp_node->val); 44 new_node->next = tar_node->next; 45 tar_node->next = new_node; 46 } 47 tmp_node = tmp_node->next; 48 } 49 } 50 return result; 51 52 } 53 };