【一天一道LeetCode】#23. Merge k Sorted Lists
2016-04-21 16:21
351 查看
一天一道LeetCode系列
(一)题目
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
(二)解题
合并K个已拍好序的链表。剑指上有合并两个已排好序的链表的算法,那么K个数,我们可以采用归并排序的思想,不过合并函数可能需要修改一下,换成合并两个已排好序的链表的方法。代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeKLists(vector<ListNode*>& lists) { int len = lists.size(); if(len == 0) return NULL; if(len == 1) return lists[0]; ListNode* ret = merge(lists,0,lists.size()-1); return ret; } ListNode* merge(vector<ListNode*>& lists , int i,int j){ if(i==j) return lists[i]; ListNode* ret = NULL; if(i<j){ int mid = (i+j)/2; ListNode* lhs = merge(lists , i,mid); ListNode* rhs = merge(lists , mid+1,j); ret = mergeTwoLists(lhs,rhs); } return ret; } ListNode* mergeTwoLists(ListNode* list1 , ListNode* list2){ if(list1 == NULL) return list2; if(list2 == NULL) return list1; ListNode* ret = NULL; if(list1->val < list2->val){ ret = list1; ret->next = mergeTwoLists(list1->next , list2); } else{ ret = list2; ret->next = mergeTwoLists(list1 , list2->next); } return ret; } };
相关文章推荐
- vtk编译出现"Check for working C compiler using: Visual Studio 10 -- broken"
- SQL语言
- Cookie简介
- 【一天一道LeetCode】#23. Merge k Sorted Lists
- 启动报错: org.springframework.web.context.ContextLoaderListener
- Zero Copy
- oracle sqlplus执行sql文件
- 使用appcompat_v7,定义activity全屏或无标题栏
- 两位数乘以一位数
- hdu 1573 X问题 两两可能不互质的中国剩余定理
- 个人工作总结03
- ScrollView嵌套EditText,导致EditText显示多行时滑动失效的问题
- HDU 1565 1569 方格取数 (最小割)
- 《编写高质量代码 : 改善C#程序的157个建议》读书笔记 1-10
- React-native第一课,Button的添加
- 一点点
- JS学习4(引用类型)
- HTML + CSS 之替换元素与非替换元素
- 两位数乘一位数
- iOS ---使用定位需要的依赖库