首页 > 其他 > 详细

[LeetCode] 23. Merge k Sorted Lists

时间:2016-10-02 00:23:11      阅读:215      评论:0      收藏:0      [点我收藏+]

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     
11 public:
12     ListNode* mergeKLists(vector<ListNode*>& lists) {
13         int k = lists.size();
14         if (k == 0) return NULL;
15         
16         while (k > 1){
17             for (int i = 0; i < k /2; i++){
18                 lists[i] = mergeTwoLists(lists[i], lists[k-1-i]);
19             }
20             if (k%2){
21                 k = k/2 + 1;
22             }else{
23                 k = k / 2;
24             }
25         }
26         
27         return lists[0];
28     }
29     
30 private:
31     ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
32         ListNode *dummy = new ListNode(0);
33         ListNode *ret = NULL;
34         
35         
36         ListNode *p1 = l1;
37         ListNode *p2 = l2;
38         
39         ListNode *p = dummy;
40         
41         while(p1 && p2){
42             if (p1->val < p2->val){
43                 p->next = p1;
44                 p1 = p1->next;
45             }else{
46                 p->next = p2;
47                 p2 = p2->next;
48             }
49             p = p->next;
50         }
51         
52         p1 = (!p1) ? p2 : p1;
53         
54         while (p1){
55             p->next = p1;
56             // don‘t forget to move p1 !!
57             p1 = p1->next;
58             p = p->next;
59         }
60         
61         ret = dummy->next;
62         delete dummy;
63         return ret;
64     }
65 };

 

[LeetCode] 23. Merge k Sorted Lists

原文:http://www.cnblogs.com/amadis/p/5926556.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!