zoukankan      html  css  js  c++  java
  • 【每日一题-leetcode】 21. 合并两个有序链表

    21. 合并两个有序链表

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

    示例:

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

    1.迭代

    th:主要是通过定义一个head节点 遍历两个链表就可以,最后一定会有一个链表没有遍历完 使用三目运算符进行算

    需要注意的点 因为head节点一直next next下去 所以应该定义一个root节点 作为根节点 head节点 一直next下去。返回的是root节点

    time:O(m+n)

    space:O(1)

      /*
            *思路 主要是通过定义一个head节点 遍历两个链表就可以,最后一定会有一个链表没有遍历完 使用三目运算符进行算
            notice 因为head节点一直next next下去 所以应该定义一个root节点 作为根节点 head节点 一直next下去。返回的是root节点
            */
            public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
                if(l1 == null || l2 == null){
                    return null;
                }
        
                ListNode root = new ListNode(-1);
        
                ListNode head = root;
        
                while(l1!=null && l2!= null){
                    if(l1.val <= l2.val){
                        head.next = l1;
                        l1 = l1.next; 
                    }else{
                        head.next = l2;
                        l2 = l2.next;
                    }
                    head = head.next;
                }
        
                head.next = (l1 == null ? l2 : l1);
        
                return root.next;
            }
    

    2.递归

    th:其实如果一个方法可以迭代就可以递归解决,但是递归代码虽然简洁 理解上比较难一些,递归代码无非就是 三点需要注意:1 终止条件 2. 业务逻辑 3.解决下一个子问题 也就是 调用自身。

    time:O(m+n)

    space:调用 mergeTwoLists 退出时 l1 和 l2 中每个元素都一定已经被遍历过了,所以 n + mn+m 个栈帧会消耗 O(n + m)O(n+m) 的空间。

      public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
               if(l1 == null ){
                   return l2;
               }else if(l2 ==  null){
                   return l1;
               }else if(l1.val < l2.val){
                   l1.next = mergeTwoLists(l1.next,l2);
                   return l1;
               }else {
                   l2.next = mergeTwoLists(l1,l2.next);
                   return l2;
               }
            }
    
  • 相关阅读:
    C#应用NPOI实现导出EXcel表格中插入饼状图(可实现动态数据生成)
    Asp.Net开发学习知识点整理
    Javascript,闭包
    sublime 自定义快捷生成代码块
    $.extend()使用
    ztree 数据格式及其配置
    ztree 数据格式 及 基本用法
    表单中两个submit如何判断点击的是哪个submit
    myChart.on('finished')
    jQuery数组排序
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860680.html
Copyright © 2011-2022 走看看