zoukankan      html  css  js  c++  java
  • [LeetCode] 23. 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     
    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 };
  • 相关阅读:
    Day015 PAT乙级 1013 数素数
    Day014 PAT乙级 1012 数字分类
    Day013 PAT乙级 1007 素数对猜想
    Day012 PAT乙级 1005 继续(3n+1)猜想
    Day011 PAT乙级 1003 我要通过
    Day010 PAT乙级 1002 写出这个数
    Day009 洛谷 P5707 上学迟到
    Day008 洛谷 P2181 对角线
    Day007 Java异常处理
    Fetch()
  • 原文地址:https://www.cnblogs.com/amadis/p/5926556.html
Copyright © 2011-2022 走看看