LeetCode 23. Merge k Sorted Lists

最简单的思路,如果lists.size()<=1,可直接处理;否则每次取lists最开始的两个节点,进行merge,然后push_back,同时删去最开始的两个节点,一直循环知道lists只剩下一个节点。

地狱般的460ms,更好更快算法待看,留坑。

 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* mergeTwo(ListNode* a, ListNode* b){
12         ListNode* head = new ListNode(0);
13         ListNode* res = head;
14         while(a && b){
15             if(a->val < b->val){
16                 ListNode* tmp = a->next;
17                 head->next = a;
18                 a = tmp;
19                 head = head->next;
20             }
21             else{
22                 ListNode* tmp = b->next;
23                 head->next = b;
24                 b = tmp;
25                 head = head->next;
26             }
27         }
28         while(a){
29             ListNode* tmp = a->next;
30             head->next = a;
31             a = tmp;
32             head = head->next;
33         }
34         while(b){
35             ListNode* tmp = b->next;
36             head->next = b;
37             b = tmp;
38             head = head->next;
39         }
40         return res->next;
41     }
42     ListNode* mergeKLists(vector<ListNode*>& lists) {
43         if(lists.size() < 1) return NULL;
44         if(lists.size() == 1) return lists[0];
45         // ListNode* resH(NULL);
46         while(true){
47             if(lists.size() == 1) break;
48             lists.push_back(mergeTwo(lists[0],lists[1]));
49             lists.erase(lists.begin());
50             lists.erase(lists.begin());
51         }
52         
53         return lists[0];
54     }
55 };

 

posted @ 2016-04-04 16:12  co0oder  阅读(116)  评论(0编辑  收藏  举报