今天的题目稍微有点复杂了,因为是K个有序链表的合并,看到这道题后的大体思路是这样的:

  1.首先先做到两个链表的合并,链表的合并我想到的是用递归操作,

  2.其次是多个链表的合并,所以在第一步实现的基础上,我考虑每次选择两个链表进行合并,一个链表数组作为一个整体,那么就可以采用归并算法进行合并,利用两个指针分别指向当前的数组位置,不断切分直到指针指向一个位置,再返回,然后进行合并,由于递归的操作,可以保证每次合并时只会有两个排序好的链表。

所以这辆的关键就是要搞清楚怎么递归去合并两个链表,以及如何递归合并一个大的数组

如下是代码:

 package algorithm;

 public class RecursiveSort {

     public ListNode mergeKLists(ListNode[] lists) {
if(lists.length < 1){
return null;
} return merge(lists,0,lists.length-1);
} private ListNode merge(ListNode[] lists,int left,int right){ if(left >= right){
return lists[left];
}
int center = (left+right)/2; ListNode leftNode = merge(lists,left,center);
ListNode rightNode = merge(lists,center+1,right); ListNode temp = new ListNode();
temp = mergeTwoListNode2(leftNode,rightNode,temp); return temp; } /**
* 递归合并
* @param l1
* @param l2
* @param temp
* @return
*/
private ListNode mergeTwoListNode2(ListNode l1,ListNode l2,ListNode temp){
if(l1 == null || l2 == null){
if(l1 == null && l2 == null){
return l1; //边界情况返回哪个都是可以的
}else {
temp = l1 == null ? l2 : l1;
} return temp;
} if(l1.val > l2.val){
temp = l2;
temp.next = mergeTwoListNode2(l1,l2.next,temp.next);
}else {
temp = l1; temp.next = mergeTwoListNode2(l1.next,l2,temp.next);
} return temp; } }

最后说实话,对于递归我还是没有搞明白,这道题也算是稀里糊涂的就完成了,但是个人认为比较重要的一点是先做好简单的,也就是先把两个链表的合并解决了,那剩下多个链表的合并就可以转变为多次 两个链表的合并这一步骤

最新文章

  1. AI PRO I 第4章
  2. Generate Ubuntu Install Media On Mac
  3. Python 学习笔记01
  4. MVC学习笔记索引帖
  5. CAP Confusion: Problems with ‘partition tolerance’
  6. BootStrap2学习日记12---注册表单
  7. ruby 编写迭代器
  8. Linux的cat、more、less的区别
  9. break,continue,return 区别
  10. UIViewController控制器的生命周期
  11. 对象图(Object Diagram)—UML图(三)
  12. 三分钟解读springmvc依赖
  13. Linux基础命令操作实例
  14. .net 自动摘要等算法 HanLP.net
  15. Springboot整合activemq
  16. 直接借鉴的 ids拼接
  17. 点分治 poj1741
  18. C# 各类常见Exception 异常信息
  19. python之文件操作的几种模式总结
  20. linux代码常用查询!!!!!!!!!!!!

热门文章

  1. MyBatis——特殊传参问题小结
  2. Heat map 绘图神奇
  3. 如何屏蔽掉烦人的www.google-analytics.com
  4. sed例子
  5. Spring Aop(二)——基于Aspectj注解的Spring Aop简单实现
  6. Flutter 的异步机制Future
  7. centOS 安装 npm
  8. vue 解决jsonp跨域
  9. Coloring Edges 【拓扑判环】
  10. Orderly Class