这两天一直也没有顾上记录一下自己做过的题目,回头看看,感觉忘的好快,今天做了一个hard,刚开始觉得挺难得,想了两种方法,一种是每次都从k个list中选取最小的一个,为空的直接跳过,再就是每次合并其中的两个list,直到最终合并完成,这就要用到地柜的方法,还有就是划分,感觉递归的思路比较清晰,就拿地柜的写了,使用递归的方法,这道题目就是以21. Merge Two Sorted Lists  为基础的。

  阶梯思路就是,每次都从中间切割lists,直到切割完之后左侧或者右侧为,一个或者两个list就对其进行合并或者直接返回,合并的过程就是Merge Two Sorted Lists了,左右两侧都地柜完成之后,对他们返回的两个两遍进行合并。递归的程序看代码可能会比较好明白一点。

代码如下:

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists.length == )
return null;
return divide(lists,,lists.length-);
}
public ListNode divide(ListNode[] lists,int left,int right){
if(left == right){
return lists[left];
}
else if(left == right-){
return merge2Lists(lists[left],lists[right]);
}
else{
int mid = (left+right)/;
ListNode leftNode = divide(lists,left,mid);
ListNode rightNode = divide(lists,mid+,right);
return merge2Lists(leftNode,rightNode);
}
}
public ListNode merge2Lists(ListNode l1,ListNode l2){
ListNode la = new ListNode(-),lm = la;
while(l1!=null&&l2!=null){
if(l1.val<l2.val){
lm.next = l1;
lm = l1;
l1 = l1.next; }
else{
lm.next = l2;
lm = l2;
l2 = l2.next;
}
}
lm.next = (l1!=null)?l1:l2;
return la.next;
}
}

小贴士:在合并两个链表的题目中,只要在最前面人为添加一个假的节点就可以避免好多关于头结点的判断,而最后只需要,将假节点跳过即可,在其他类型的链表题目中添加假节点,也不失为一种好方法。

 

最新文章

  1. Mysql查询——深入学习
  2. 关于RequireJS与AngularJS的集成文档
  3. zabbix之Nginx安装
  4. CmRegisterCallback使用方法
  5. select 语句占位符
  6. 笔记一、Git服务器【转】
  7. 从零开始学Sketch——进阶篇-b
  8. Net线程池设计
  9. 对于Android的线程和线程池的理解
  10. 利用jackson转成json字符串(ssh中)
  11. JQuery树形目录插件Dynatree
  12. 最短路 - floyd算法
  13. 移动App专项测试
  14. C++学习笔记55:流类库与输入输出
  15. NFS服务配置
  16. RabbitMQ运行机制
  17. NOIP2018复赛获奖名单
  18. 如何用Fiddle工具实现手机抓包
  19. iOS 更换键盘的return键的形式
  20. 什么是&quot;抓包&quot;?怎样&quot;抓包&quot;?

热门文章

  1. (一)使用sklearn做各种回归
  2. 正则表达式之Regex.Matches()用法
  3. 学习SPRING BOOT, SPRING CLOUD之Eureka和security
  4. [BZOJ1018][SHOI2008]堵塞的交通traffic 线段树维护连通性
  5. 解析Java的volatile关键字
  6. Python的并发并行[3] -&gt; 进程[1] -&gt; 多进程的基本使用
  7. Cosmos DB
  8. 线段树【 bzoj3132 】【p4145 】上帝造题的七分钟2 / 花神游历各国
  9. 探究堆喷射(heap spray)
  10. 磁盘镜像工具Guymager