解题思路:

第一步:先设置一个虚拟节点(傀儡节点)newNode,不做任何的数据处理。它的作用就是把两个链表中最小的节点放到它之后。

第二步:设置两个链表的头结点分别为head1和head2。然后比较这俩谁小,把小的往newNode后串。

第三步:当其中一个链表走完后,就把另一个链表剩下的节点直接串上,使其tmp.next=head1/head2。

图解:

完整代码如下:

//合并两个有序链表public static Node mergeTwoLists(Node head1,Node head2){Node newNode=new Node(-1); //虚拟节点,数据不具备意义Node tmp=newNode;while (head1!=null&&head2!=null){if (head1.val< head2.val){tmp.next=head1;tmp=tmp.next;head1=head1.next;}else{tmp.next=head2;tmp=tmp.next;head2=head2.next;}}if (head1!=null){tmp.next=head1;}if (head2!=null){tmp.next=head2;}return newNode.next;}public static void main(String[] args) {SingleLinkedList singleLinkedList1=new SingleLinkedList();singleLinkedList1.addLast(2);singleLinkedList1.addLast(7);singleLinkedList1.addLast(8);SingleLinkedList singleLinkedList2=new SingleLinkedList();singleLinkedList2.addLast(1);singleLinkedList2.addLast(5);singleLinkedList2.addLast(9);singleLinkedList2.addLast(12);singleLinkedList2.addLast(21);Node ret=mergeTwoLists(singleLinkedList1.head,singleLinkedList2.head);singleLinkedList1.myToString(ret);

代码里用到的尾插法、打印链表在前面的实现一个简单的单向链表   里有提到,但是打印链表需要重载一个方法,原来的打印链表是从头结点开始的,但是在这里我们设置了一个傀儡节点,新节点。我们需要从新节点开始打印,重载的打印链表代码如下:

    public void  myToString(Node newNode){         //打印链表里的元素Node cur=newNode;while (cur!=null){              System.out.print(cur.val+" ");        cur=cur.next;}}

main函数如下:

    public static void main(String[] args) {SingleLinkedList singleLinkedList1=new SingleLinkedList();singleLinkedList1.addLast(2);singleLinkedList1.addLast(7);singleLinkedList1.addLast(8);SingleLinkedList singleLinkedList2=new SingleLinkedList();singleLinkedList2.addLast(1);singleLinkedList2.addLast(5);singleLinkedList2.addLast(9);singleLinkedList2.addLast(12);singleLinkedList2.addLast(21);Node ret=mergeTwoLists(singleLinkedList1.head,singleLinkedList2.head);singleLinkedList1.myToString(ret);}//运行结果:
//2 5 7 8 9 12 21 

合并两个有序链表(Java)相关推荐

  1. 《LeetCode力扣练习》第21题 合并两个有序链表 Java

    <LeetCode力扣练习>第21题 合并两个有序链表 Java 一.资源 题目: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例 ...

  2. 【Java】leetCode 21 合并两个有序链表

    题目 : 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 解题思路 : 1.依据以上两个升序链表进行拼接: 2.先定义一个傀儡节点newHead,用来 ...

  3. java合并两个有序链表_JS实现的合并两个有序链表算法示例

    本文实例讲述了JS实现的合并两个有序链表算法.分享给大家供大家参考,具体如下: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1-> ...

  4. Java实现 LeetCode 21 合并两个有序链表

    21. 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1 ...

  5. 【LeetCode】【HOT】21. 合并两个有序链表(递归)

    [LeetCode][HOT 100]21. 合并两个有序链表 文章目录 [LeetCode][HOT 100]21. 合并两个有序链表 package hot;import java.util.Ar ...

  6. 两个有序链表序列的交集_剑指offer第21天:合并两个有序链表

    我准备了 1000 本电子书和计算机各领域高清思维导图 100 张,关注后回复[资源],即可获取!更可回复[内推]加入 BAT 内推群! 01.题目分析 第21题:合并两个有序链表 将两个有序链表合并 ...

  7. 021合并两个有序链表

    合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. C语言: /*** Definition for singly-linked lis ...

  8. 【每日一算法】 合并两个有序链表

    微信改版,加星标不迷路! 每日一算法-合并两个有序链表 作者:阿广 阅读目录 1 题目 2 解析 1 题目 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. ...

  9. 合并两个有序链表分析

    合并两个有序链表: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: l1 l2 输入:1->2->4, 1->3->4 ...

  10. 算法:合并两个有序链表

    题目 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1- ...

最新文章

  1. Socket编程之简单介绍
  2. 三星手机com.android.settings,三星手机恢复出厂设置方法【具体步骤】
  3. wince -- telnet登陆密码的取消
  4. php中mysql和mysqli_PHP中mysql和mysqli的区别
  5. html为什么未响应,Word2010总是未响应怎么办?
  6. python的递归为什么难理解,python - Python - 很难理解这个递归代码示例 - SO中文参考 - www.soinside.com...
  7. 基于机器视觉的铁片轮廓检测
  8. 如何看待部分985研究生不如本科生,只能去做软件测试?
  9. vue 路由参数变化,页面不刷新(数据不更新)解决方法
  10. php简单使用shmop函数创建共享内存减少服务器负载
  11. linux如何设置环境变量
  12. 数码单反相机与无反光镜相机。选择产品摄影解决方案
  13. ArcGIS与GIS知识:ARCGIS中坐标转换及地理坐标、投影坐标的定义以及投影分度带的划分
  14. nginx配置https后报错nginx: [emerg] https protocol requires SSL support in XXX.conf详细解决方法
  15. OptionError: ‘Pattern matched multiple keys‘
  16. QtCreator一键重命名
  17. 幂法求矩阵的最大特征值和对应特征向量
  18. html盒子整体向下移动,盒子上下左右居中方法全(持续更新中)
  19. 2021-05-31以及2021-06-01(从136开始) JAVA学习笔记
  20. ZYNQ PL采集AD7606数据PS LWIP发送

热门文章

  1. 新浪微博如何批量删除以前发过的微博
  2. 11-FreeSwitch-freeswitch架构
  3. nifi从入门到实战(保姆级教程)——环境篇
  4. 步进电机弯道加速度、起跳速度、单轴加速度设置方法
  5. 基于SpringBoot的在线问卷调查管理系统
  6. web端文字转语音播放的几种方式
  7. python操作cad的模块_利用python控制Autocad:pyautocad方式
  8. JAVA ftps设置_如何使用apache.commons.net.ftps配置客户端身份验证?
  9. Java实验输出希腊字母表
  10. 生物信息分析中的reads是什么