LeetCode23:Merge k Sorted Lists
2015-11-23 12:27
513 查看
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 *mergeKLists(vector<ListNode *> &lists) {
int n = lists.size();
if (n == 0) return NULL;
while (n > 1)
{
int k = (n + 1) / 2;
for (int i = 0; i < n / 2; i++)
lists[i] = mergeTwoLists(lists[i], lists[i + k]);
n = k;
}
return lists[0];
}
//merge two sorted lists
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
if (l1 == NULL) return l2;
if (l2 == NULL) return l1;
ListNode *head = new ListNode(-1);
ListNode *p = head;
while (l1 != NULL && l2 != NULL) {
if (l1->val > l2->val)
{
p->next = l2;
l2 = l2->next;
}
else
{
p->next = l1;
l1 = l1->next;
}
p = p->next;
}
if (l1 == NULL)
{
p->next = l2;
}
else if (l2 == NULL)
{
p->next = l1;
}
return head->next;
}
};
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 *mergeKLists(vector<ListNode *> &lists) {
int n = lists.size();
if (n == 0) return NULL;
while (n > 1)
{
int k = (n + 1) / 2;
for (int i = 0; i < n / 2; i++)
lists[i] = mergeTwoLists(lists[i], lists[i + k]);
n = k;
}
return lists[0];
}
//merge two sorted lists
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
if (l1 == NULL) return l2;
if (l2 == NULL) return l1;
ListNode *head = new ListNode(-1);
ListNode *p = head;
while (l1 != NULL && l2 != NULL) {
if (l1->val > l2->val)
{
p->next = l2;
l2 = l2->next;
}
else
{
p->next = l1;
l1 = l1->next;
}
p = p->next;
}
if (l1 == NULL)
{
p->next = l2;
}
else if (l2 == NULL)
{
p->next = l1;
}
return head->next;
}
};
相关文章推荐
- Java初步(OOP)
- 读取文本的内容和将文本写入文件中
- loadrunner的参数化设置
- 《编程之美》——最大公约数问题
- 各种排序
- List 分割
- stream读越界
- python3 套接字异常(a byte-like object is required not str)
- Java中的线程
- Java画图程序设计
- C语言基础第二篇--基本数据类型
- xilinx_spartan6_io_电平读书笔记
- python实现爬虫统计学校BBS男女比例(三)数据处理
- 实验八 图的遍历
- 微软面试100题
- volatile的用处
- Nginx反向代理配置
- Intervals(差分约束)
- java课程设计-文本编辑器
- 单例设计模式