题目描述:

  输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

  解题思路:

  首先需要判断几个特殊情况,即判断输入的两个指针是否为空。如果第一个链表为空,则直接返回第二个链表;如果第二个链表为空,则直接返回第一个链表。如果两个链表都是空链表,合并的结果是得到一个空链表。

  两个链表都是排序好的,我们只需要从头遍历链表,判断当前指针,哪个链表中的值小,即赋给合并链表指针,剩余的结点仍然是排序的,所以合并的步骤和之前是一样的,所以这是典型的递归过程,用递归可以轻松实现。

  举例:

![](https://img2018.cnblogs.com/blog/1608161/201904/1608161-20190427150721322-366814884.png)

  编程实现(Java):

	//方法一:递归实现
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1==null)
return list2;
if(list2==null)
return list1;
ListNode head=null; //头节点
if(list1.val<=list2.val){
head=list1;
head.next=Merge(list1.next,list2);
}else{
head=list2;
head.next=Merge(list1,list2.next);
}
return head;
} //方法二:非递归实现
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1==null)
return list2;
if(list2==null)
return list1;
ListNode head=new ListNode(-1);//头节点
ListNode thehead=head;
while(list1!=null && list2!=null){
if(list1.val<=list2.val){
thehead.next=list1;
list1=list1.next;
}else{
thehead.next=list2;
list2=list2.next;
}
thehead=thehead.next;
}
if(list1!=null) //归并完需要检查哪个链表还有剩余
thehead.next=list1;
if(list2!=null)
thehead.next=list2;
return head.next;
}

最新文章

  1. fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include &quot;StdAfx.h&quot;”? 解决方法
  2. Android基于mAppWidget实现手绘地图(三)--环境搭建
  3. Overview and Evaluation of Bluetooth Low Energy: An Emerging Low-Power Wireless Technology
  4. NHibernate系列文章四:NHibernate运行时监控
  5. 运用.NIT将数据存入数据库、读取数据库(运用封装)陈老师作业
  6. SharedObject.getLocal(&quot;application-name&quot;)
  7. Objective-c中的对象间的消息传递以及消息路由
  8. winform 猜猜看 分类: WinForm 2014-08-21 14:12 267人阅读 评论(0) 收藏
  9. WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法
  10. java线程API学习 线程池ThreadPoolExecutor(转)
  11. 数据库索引------Btree索引的使用限制
  12. BZOJ3029守卫者的挑战(概率dp)
  13. HDU 4768 Flyer【二分】||【异或】
  14. java 中 热部署与卸载关系
  15. Python爬虫学习——光学字符识别
  16. envi利用矢量数据对影像做多边形裁剪 (转)
  17. Python3.6全栈开发实例[017]
  18. js享元模式
  19. SqlServer存储过程中常用函数及操作
  20. C#中Hashtable的用法 转

热门文章

  1. Java重载和覆盖
  2. Intellij Idea 13:导入openfire源代码
  3. iphone照片查看器
  4. DOS命令将黑框中查询到的信息保存到TXT等文件里
  5. poj 1256 Anagram—next_permutation的神奇应用
  6. Android入门之文件系统操作(二)文件操作相关指令
  7. ListView实现简单列表
  8. local_response_normalization 和 batch_normalization
  9. LMDB中的mmap、Copy On Write、MVCC深入理解——讲得非常好,常来看看!
  10. POJ 2728(最优比率生成树+01规划)