Java有序链表的合并实现方法

 更新时间:2023年04月13日 10:06:51   作者:ziop-三月  
这篇文章主要通过两个例题为大家介绍一下Java合并两个及以上有序链表的实现方法,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下

问题

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例二:

<strong>输入:</strong>l1 = [], l2 = []
<strong>输出:</strong>[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

思路

版本一

  • 新建一个空的链表 nList
  • 在两个链表(l1,l2)都不为空的情况下,比较两个链表的第一个元素的值的大小,取出最小的加入到新链表当中,然后小链表的头指针指向下一位,并且nList的指针也指向下一位
  • 如果两个链表还都不为空,继续循环
  • 如果两个链表有一个为空,那么将不为空的链表拼接到nList后边
  • 最后返回 nList 的next 作为新链表的头结点

版本二

  • 首先判断两个链表是否为空,为空直接返回空链表。不为空的继续向下走
  • 判断 l1 和 l2的头结点谁更小,则将这个节点保存为头结点,后边的节点一次拼接在该节点上边。
  • 后边思路同版本一

答案

版本一

新建一个节点,将原来的链表都传到新的链表当中

public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
    ListNode head = new ListNode(-1);
    ListNode   = head;
    while (list1 != null && list2 != null) {
        boolean b = list1.val <= list2.val;
        all.next = b ? list1 : list2;
        if (b) list1 = list1.next;
        else list2 = list2.next;
        all = all.next;
    }
    all.next = list1 != null ? list1 : list2;
    return head.next;
}

版本二

从原来的链表中选择出来一个进行整合,不适用任何新的内存

public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
    if (list1 == null || list2 == null) {
        return list1 == null ? list2 : list1;
    }
    ListNode head = list1.val <= list2.val ? list1 : list2;
    if (list1.val <= list2.val)
        list1 = list1.next;
    else
        list2 = list2.next;
    ListNode tmp = head;
    while (list1 != null && list2 != null) {
        boolean b = list1.val <= list2.val;
        tmp.next = b ? list1 : list2;
        if (b) list1 = list1.next;
        else list2 = list2.next;
        tmp = tmp.next;
    }
    tmp.next = list1 != null ? list1 : list2;
    return head;
}

到此这篇关于Java有序链表的合并实现方法的文章就介绍到这了,更多相关Java有序链表合并内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JDK动态代理提高代码可维护性和复用性利器

    JDK动态代理提高代码可维护性和复用性利器

    这篇文章主要为大家介绍了JDK动态代理提高代码可维护性和复用性利器,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 解决 java.lang.NoSuchMethodError的错误

    解决 java.lang.NoSuchMethodError的错误

    这篇文章主要介绍了解决 java.lang.NoSuchMethodError的错误的相关资料,需要的朋友可以参考下
    2017-06-06
  • 使用spring-boot-admin对spring-boot服务进行监控的实现方法

    使用spring-boot-admin对spring-boot服务进行监控的实现方法

    这篇文章主要介绍了使用spring-boot-admin对spring-boot服务进行监控的实现方法,需要的朋友可以参考下
    2018-02-02
  • 深入解析Java中的JDBC事务

    深入解析Java中的JDBC事务

    这篇文章主要介绍了深入解析Java中的JDBC事务,包含了Java多线程的事务并发等知识,需要的朋友可以参考下
    2015-08-08
  • 详解Java如何简化条件表达式

    详解Java如何简化条件表达式

    在复杂的实际业务中,往往会出现各种嵌套的条件判断逻辑。随着需求的增加,条件逻辑会变得越来越复杂。面对这种情况,简化判断逻辑就是不得不做的事情,下面为大家介绍几种方法
    2022-06-06
  • SpringBoot+Echarts实现请求后台数据显示饼状图

    SpringBoot+Echarts实现请求后台数据显示饼状图

    这篇文章主要介绍了SpringBoot+Echarts实现请求后台数据显示饼状图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Java中IO流文件读取、写入和复制的实例

    Java中IO流文件读取、写入和复制的实例

    下面小编就为大家带来一篇Java中IO流文件读取、写入和复制的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • MyBatis高级映射ResultMap解决属性问题

    MyBatis高级映射ResultMap解决属性问题

    对于数据库中对表的增删改查操作,我们知道增删改都涉及的是单表,而只有查询操作既可以设计到单表操作又可以涉及到多表操作,所以对于输入映射parameterType而言是没有所谓的高级映射的,也就是说高级映射只针对于输出映射
    2023-02-02
  • java @Value(

    java @Value(

    这篇文章主要介绍了java @Value("${}")获取不到配置文件中值的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java动态调用类中方法代码

    Java动态调用类中方法代码

    这篇文章主要介绍了Java动态调用类中方法代码,需要的朋友可以参考下
    2014-02-02

最新评论