Advertisement
Guest User

Untitled

a guest
Nov 21st, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  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.        
  13.         return merge(lists, 0, lists.size()-1);
  14.     }
  15.    
  16.    
  17.     ListNode* merge(vector<ListNode*>& lists, int i, int j) {
  18.        
  19.         if(i == j) return lists[i];
  20.         if(i+1 == j)
  21.         {
  22.             return merge2(lists[i], lists[j]);
  23.         }
  24.         int m = (i+j)/2;
  25.        
  26.         ListNode* a = merge(lists, i, m);
  27.         ListNode* b = merge(lists, m+1, j);
  28.        
  29.     }
  30.    
  31.     ListNode* merge2(ListNode* l1, ListNode* l2){
  32.        
  33.         ListNode* pre = NULL, *tmp, *head;
  34.        
  35.         while(l1 != NULL && l2 != NULL)
  36.         {
  37.             if(l1->val > l2->val)
  38.             {
  39.                 if(pre != NULL)
  40.                 {
  41.                     tmp = l2;
  42.                     l2 = l2->next;
  43.                    
  44.                     tmp->next = l1;
  45.                     pre->next = tmp;
  46.                 }
  47.                 else
  48.                 {
  49.                     tmp = l2;
  50.                     l2 = l2->next;
  51.                    
  52.                     head = tmp;
  53.                     pre = tmp;
  54.                     pre->next = l1;
  55.                 }
  56.             }
  57.             else
  58.             {
  59.                 if(head == NULL)
  60.                 {
  61.                     head = l1;
  62.                 }
  63.                 pre = l1;
  64.                 l1 = l1->next;
  65.             }
  66.         }
  67.        
  68.        
  69.         if(l2 != NULL)
  70.         {
  71.             l1->next = l2;
  72.         }
  73.        
  74.         return head;
  75.     }
  76. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement