• 力扣21.合并两个有序链表


    21. 合并两个有序链表

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

    输入:1->2->4, 1->3->4
    输出:1->1->2->3->4->4

    非递归(迭代):

    简单的归并

     1 class Solution {
     2     // 简单的归并
     3     public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
     4         ListNode head = new ListNode(); // 创建一个头结点,方便后面的遍历过程
     5         ListNode p = head;
     6         // 判断l1和l2的表头结点,链接小的,后移
     7         while(l1 != null && l2 != null){
     8             if(l1.val <= l2.val){
     9                 p.next = l1;
    10                 l1 = l1.next;
    11             }else{
    12                 p.next = l2;
    13                 l2 = l2.next;
    14             }
    15             p = p.next;
    16         }
    17         // 链接多余的部分
    18         p.next = (l1 != null) ? l1 : l2;
    19         return head.next;
    20     }
    21 }

    力扣测试时间为1ms, 空间为39.4MB

    复杂度分析:

    时间复杂度:最坏情况下需要遍历所有结点(即交叉连接两链表结点时),时间复杂度为O(n+m)

    空间复杂度:O(1)

    递归写法

    1. 先判断某个链表是否为空,如果为空直接返回另一个链表

    2. 如果两个链表均不为空,根据两链表的表头大小决定下一层的递归参数

    class Solution {
        // 简单的归并
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
           if(l1 == null){
               return l2;
           }
           if(l2 == null){
               return l1;
           }
           if(l1.val <= l2.val){
               l1.next = mergeTwoLists(l1.next, l2);
               return l1;
           }else{
               l2.next = mergeTwoLists(l1, l2.next);
               return l2;
           }
        }
    }

    力扣测试时间为:0ms, 空间为39MB

    复杂度分析:

    时间复杂度:最坏情况下要遍历所有结点,时间复杂度为O(n+m)

    空间复杂度:同样是在最坏情况下,递归深度最大可达(n+m)层,所以空间复杂度为O(n+m)

    根据力扣的测试结果,递归好像比非递归的解法快一些

    思路参考:

    https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode-solu/

  • 相关阅读:
    spring-boot BUG 集锦
    彻底卸载mysql
    mybatis -generator 逆向工程
    内网穿透工具使用
    Spring 笔记
    maven项目 @Resource报错 ava.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;
    log4j配置及异常、解决办法
    from…import * 语句与 import 区别
    python:__file__
    python安装yaml
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/13126519.html
Copyright © 2020-2023  润新知