【剑指Offer】16、合并两个排序的链表
2024-08-31 05:40:05
题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路:
首先需要判断几个特殊情况,即判断输入的两个指针是否为空。如果第一个链表为空,则直接返回第二个链表;如果第二个链表为空,则直接返回第一个链表。如果两个链表都是空链表,合并的结果是得到一个空链表。
两个链表都是排序好的,我们只需要从头遍历链表,判断当前指针,哪个链表中的值小,即赋给合并链表指针,剩余的结点仍然是排序的,所以合并的步骤和之前是一样的,所以这是典型的递归过程,用递归可以轻松实现。
举例:
![](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;
}
最新文章
- fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include ";StdAfx.h";”? 解决方法
- Android基于mAppWidget实现手绘地图(三)--环境搭建
- Overview and Evaluation of Bluetooth Low Energy: An Emerging Low-Power Wireless Technology
- NHibernate系列文章四:NHibernate运行时监控
- 运用.NIT将数据存入数据库、读取数据库(运用封装)陈老师作业
- SharedObject.getLocal(";application-name";)
- Objective-c中的对象间的消息传递以及消息路由
- winform 猜猜看 分类: WinForm 2014-08-21 14:12 267人阅读 评论(0) 收藏
- WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法
- java线程API学习 线程池ThreadPoolExecutor(转)
- 数据库索引------Btree索引的使用限制
- BZOJ3029守卫者的挑战(概率dp)
- HDU 4768 Flyer【二分】||【异或】
- java 中 热部署与卸载关系
- Python爬虫学习——光学字符识别
- envi利用矢量数据对影像做多边形裁剪 (转)
- Python3.6全栈开发实例[017]
- js享元模式
- SqlServer存储过程中常用函数及操作
- C#中Hashtable的用法 转
热门文章
- Java重载和覆盖
- Intellij Idea 13:导入openfire源代码
- iphone照片查看器
- DOS命令将黑框中查询到的信息保存到TXT等文件里
- poj 1256 Anagram—next_permutation的神奇应用
- Android入门之文件系统操作(二)文件操作相关指令
- ListView实现简单列表
- local_response_normalization 和 batch_normalization
- LMDB中的mmap、Copy On Write、MVCC深入理解——讲得非常好,常来看看!
- POJ 2728(最优比率生成树+01规划)