LeetCode解题心得,欢迎指正!
原题:合并k个排序的链接列表并将其作为一个排序列表返回。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeKLists(struct ListNode** lists, int listsSize) {
return merge(lists,0,listsSize-1);
}
struct ListNode* merge(struct ListNode **lists, int begin ,int end)
{
if(begin > end) return NULL;
if(begin == end) return lists[begin];
int mid=(begin+end)/2;
struct ListNode *left=merge(lists,begin,mid);
struct ListNode *right=merge(lists,mid+1,end);
return merge_two_lists(left,right);
}
struct ListNode* merge_two_lists(struct ListNode *list1,struct ListNode *list2)
{
if(list1 == NULL) return list2;
if(list2 == NULL) return list1;
if(list1==NULL && list2==NULL) return NULL;
struct ListNode *head=(struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *cur=head;
while(list1 &&list2)
{
if(list1->val > list2->val)
{
cur->next=list2;
list2=list2->next;
}
else
{
cur->next=list1;
list1=list1->next;
}
cur=cur->next;
}
if(list1) cur->next=list1;
if(list2) cur->next=list2;
cur=head->next;
free(head);
return cur;
}