分治法

来源:互联网 发布:程序员面试穿什么 编辑:程序博客网 时间:2024/06/15 04:03

一,Merge k Sorted Lists

题目描述

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


我的代码

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode *merge(ListNode *list1, ListNode *list2){        ListNode *p1, *p2, *head, *pre;        p1 = list1;        p2 = list2;        head = new ListNode(-1);        head->next = NULL;        pre = head;        while(p1 != NULL && p2 != NULL){            if(p1->val < p2->val){                pre->next = p1;                pre = p1;                p1 = p1->next;            } else {                pre->next = p2;                pre = p2;                p2 = p2->next;            }        }        pre->next = NULL;        if(p1 != NULL){            pre->next = p1;        }        if(p2 != NULL){            pre->next = p2;        }        return head->next;    }    /*        函数的返回值是一个指针,指向一个单链表,这个单链表是由下标从l到r的单链表融合而成的    */    ListNode *getList(int l, int r, vector<ListNode*> &lists)    {        if(l == r){            return lists[l];        }        if(l < r){            int mid = (l + r) / 2;            ListNode *left = getList(l, mid, lists);            ListNode *right = getList(mid + 1, r, lists);            return merge(left, right);        }        return NULL;    }    ListNode* mergeKLists(vector<ListNode*>& lists) {        return getList(0, lists.size() - 1, lists);    }};