LeetCode Merge k Sorted Lists(有序单链表数组的合并)
2016-06-21 14:24
459 查看
题意:给出一个有序单链表数组,将其合并成一个有序单链表
思路:将其转化成两个单链表合并的问题,用递归方式来实现
代码如下:
public class Solution
{
private ListNode mergeTwo(ListNode l1, ListNode l2)
{
if (null == l1) return l2;
if (null == l2) return l1;
if (l1 == l2) return l1;
if (l1.val < l2.val)
{
l1.next = mergeTwo(l1.next, l2);
return l1;
}
else
{
l2.next = mergeTwo(l1, l2.next);
return l2;
}
}
private ListNode reMerge(ListNode[] lists, int left, int right)
{
if (right - left < 2)
{
return mergeTwo(lists[left], lists[right]);
}
else
{
int mid = (left + right) >> 1;
return mergeTwo(reMerge(lists, left, mid), reMerge(lists, mid + 1, right));
}
}
public ListNode mergeKLists(ListNode[] lists)
{
if (null == lists || 0 == lists.length) return null;
return reMerge(lists, 0, lists.length - 1);
}
}
思路:将其转化成两个单链表合并的问题,用递归方式来实现
代码如下:
public class Solution
{
private ListNode mergeTwo(ListNode l1, ListNode l2)
{
if (null == l1) return l2;
if (null == l2) return l1;
if (l1 == l2) return l1;
if (l1.val < l2.val)
{
l1.next = mergeTwo(l1.next, l2);
return l1;
}
else
{
l2.next = mergeTwo(l1, l2.next);
return l2;
}
}
private ListNode reMerge(ListNode[] lists, int left, int right)
{
if (right - left < 2)
{
return mergeTwo(lists[left], lists[right]);
}
else
{
int mid = (left + right) >> 1;
return mergeTwo(reMerge(lists, left, mid), reMerge(lists, mid + 1, right));
}
}
public ListNode mergeKLists(ListNode[] lists)
{
if (null == lists || 0 == lists.length) return null;
return reMerge(lists, 0, lists.length - 1);
}
}
相关文章推荐
- C++基础知识(五)—— 基本输入输出
- python远程连接mysql服务器
- linux ssh更换默认的22端口
- 省市选择的简单实现(基于zepto.js)
- variable handling 函数 empty— 检查一个变量是否为空
- 每个程序员都应该知道的8个Linux命令
- C++基础知识(四)—— 操作符/运算符
- 单链表的插入(完整版程序c语言实现,以字符串为数据)
- linux错误码
- tomcat各目录(文件)作用
- 内存泄漏优化---ListView的优化
- nginx内置变量详解
- 11个基础的HTML5动画工具
- C++基础知识(二)—— 变量和数据类型
- C++基础知识(三)—— 常量
- 音乐播放器组件
- Linux下暴力破解工具Hydra详解
- Workday为何迟迟不进入中国
- Pods 更新后提示Bundle资源找不到
- Part 4: CRUD Operations on BackboneJs Models using HTTP REST Service