题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解答:
/*
public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}*/
public class Solution {public ListNode Merge(ListNode list1,ListNode list2) {if(list1==null)return list2; //判断到某个链表为空就返回另一个链表。如果两个链表都为空呢?没关系,这时候随便返回哪个链表,不也是空的吗?if(list2==null)return list1;ListNode list0=null;//定义一个链表作为返回值if(list1.val<list2.val){//判断此时的值,如果list1比较小,就先把list1赋值给list0,反之亦然list0=list1;list0.next=Merge(list1.next, list2);//做递归,求链表的下一跳的值}else{list0=list2;list0.next=Merge(list1, list2.next);}return list0;}
}

简化一下,用那个三目运算符:

public class Solution {public ListNode Merge(ListNode list1,ListNode list2) {if(list1==null)return list2;if(list2==null)return list1;ListNode head;
list0= list1.val>list2.val?list2:list1;
list0.next = list1.val>list2.val?Merge(list1,list2.next):Merge(list1.next,list2);
return list0;
}
}
据说这道题面试的时候经常考,因为它跟斐波那契数列问题一样有递归和非递归两种解法,上面说了递归的解法,下面再来讲下非递归的解法:
/*
public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}*/
public class Solution {public ListNode Merge(ListNode list1,ListNode list2) {if(list1 == null)return list2;if(list2 == null )return list1;ListNode tmp1 = list1;ListNode tmp2 = list2;ListNode head = new ListNode(0);//这里不能把返回链表赋值为null,因为下一行马上就要把它赋值给另一链表,得让它在内存里有位置才行ListNode headptr = head;while(tmp1 != null && tmp2!=null){             if(tmp1.val <= tmp2.val){head.next=tmp1;head = head.next;tmp1 = tmp1.next;}else{head.next=tmp2;head = head.next;tmp2=tmp2.next;}}//其中一个链表已经跑到头之后,继续单链表的合并while(tmp1 != null){head.next = tmp1;head = head.next;tmp1= tmp1.next;}while(tmp2 != null){head.next = tmp2;head = head.next;tmp2= tmp2.next;}head = headptr.next;return head;}
}

JAVA实现合并两个排序的链表(《剑指offer》)相关推荐

  1. 剑指Offer25 合并两个排序的链表

    剑指Offer 25. 合并两个排序的链表 剑指Offer 25. 合并两个排序的链表 这题是一道简单题,如果学习了数据结构当中的链表的话,可以很轻松就想出解题过程: /*** Definition ...

  2. 《LeetCode力扣练习》剑指 Offer 25. 合并两个排序的链表 Java

    <LeetCode力扣练习>剑指 Offer 25. 合并两个排序的链表 Java 一.资源 题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: ...

  3. 剑指Offer:合并两个排序的链表【25】

    剑指Offer:合并两个排序的链表[25] 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析 每次都是比较箭头节点,把小节点连接到已经合 ...

  4. 剑指offer系列——剑指 Offer 25. 合并两个排序的链表

    ⭐️前面的话⭐️ 大家好!本篇文章将介绍关于数据结构之链表的OJ题,来自力扣:21. 合并两个有序链表 或 剑指 Offer 25. 合并两个排序的链表 题解,展示代码语言暂时为:Java语言与C语言 ...

  5. 剑指offer:面试题25. 合并两个排序的链表

    题目:合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1->1-& ...

  6. 【剑指Offer专题】链表系列:从尾到头打印链表、反转链表、回文链表、合并两个排序的链表(C++和Python实现)...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 剑指Offer(三):从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每 ...

  7. LeetCode-剑指 Offer 25. 合并两个排序的链表

    剑指 Offer 25. 合并两个排序的链表 思路一:双指针法 1.设置dummy为头结点,放置于新链表之前,最后返回的就是dummy.next:设置cur为当前节点,从dummy开始 2.当两个链表 ...

  8. python 合并两个排序的链表

    合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1->1-> ...

  9. 《剑指offer》-- 链表中倒数第k个节点、反转链表、合并两个排序的链表

    一.链表中倒数时第k个节点: 1.题目: 输入一个链表,输出该链表中倒数第k个结点. 2.解题思路:单链表具有单向移动的特性. (1)第一种:先遍历链表,算出链表节点数count,第二次直接遍历到第c ...

最新文章

  1. 探测服务器操作系统工具,探测服务器操作系统
  2. Android 分享机顶盒项目的封装类《GridView》
  3. Vivado中TCL的使用
  4. 谷歌开发者大会焦点:大中华区新掌门亮相,Android 10原生支持5G,TF2.0大更新...
  5. 对于XLS碎片提取的深入研究
  6. mysql修改存储引擎报错,MySQL改变表的存储引擎
  7. 讯飞C/C++语音合成基础篇
  8. C# Select SelectMany 区别
  9. 2013-01-09 13:31 IE不支持textarea的maxlength属性,Firefox支持
  10. android 判断服务是否运行
  11. Nginx配置文件(作为Web服务器)
  12. 手机断触怎么办_手机触摸屏失灵了怎么办,五种方法自己就能修好它!
  13. js下载文件 监听下载完成事件
  14. 苹果x用安兔兔测试html5,安兔兔跑分23万,苹果iPhone X怎么样?
  15. 云服务卸载MySQL
  16. Eric6与pyqt5学习笔记 6【实战2 window伪文本编辑器】【纯eric6操作】
  17. 强化学习 马尔科夫决策过程(MDP)
  18. OSChina 周一乱弹 ——用电脑搞了个烹饪料理机 !
  19. 【已解决】IDEA创建Maven多模块项目子模块引用不到父模块的pom
  20. Vue js混淆加密 webpack-obfuscator

热门文章

  1. MySQL Replication 主从复制全方位解决方案
  2. asp.net core mvc上传大文件解决方案
  3. 如何初始化静态地图?
  4. 列表自定义的Type和BaseType参考
  5. MATLAB编程与应用系列-第2章 数组及矩阵的创建及操作(4)
  6. Go 语言的垃圾回收演化历程:垃圾回收和运行时问题
  7. PHP 7.0新增特性详解
  8. Juniper批量新增用户命令工具
  9. 销售易移动CRM助力制造业转型智能制造
  10. Sqlserver__数据表排序记录和界面显示排序记录不一致的问题