Merge k Sorted Lists [LeetCode]

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

Summary:  Finds the smallest node every round, then links it to the one sorted list.

 1     ListNode *mergeKLists(vector<ListNode *> &lists) {

 2         ListNode * head = NULL;

 3         ListNode * pre_node = NULL;

 4         while(true){

 5             //find the smallest one

 6             ListNode * smallest_node = NULL;

 7             for(auto item : lists) {

 8                 if(item != NULL){

 9                     if(smallest_node == NULL || item->val < smallest_node->val )

10                         smallest_node = item;

11                 }

12             }

13             if(smallest_node == NULL)

14                 break;

15                 

16             if(pre_node == NULL){

17                 pre_node = smallest_node;

18                 head = pre_node;

19             }else{

20                 pre_node -> next = smallest_node;

21                 pre_node = pre_node -> next;

22             }

23             

24             for(int i = 0; i< lists.size(); i ++){

25                 if(lists[i] == smallest_node)

26                     lists[i] = lists[i] -> next;

27             }

28         }

29         return head;

30     }

 

你可能感兴趣的:(LeetCode)