算法打卡Day6_ leetcode21. 合并两个有序链表

简介: 算法打卡Day6_ leetcode21. 合并两个有序链表

Leetcode原题

21.合并两个有序链表

20200401134307494.png

思路

其实我本人对链表这一块学得挺模糊的。我们知道链表有分单链表、双链表、循环链表。

单链表的Node数据结构,是一个元素data,和存储指向下一个节点的next。这一道题刚好是单链表入门题。

方法1 循环双指针法

我们可以设立一个哨兵节点result,用于方便返回合并后的链表。并维护一个指针pre,只要不断的操作这个指针,分别比较 l1 和 l2 两个链表头节点的值,谁的值小,pre就将指针指向较小的一方,同时不断的更新l1,l2的节点值。直到l1或l2指向空。在循环终止的时候, l1 和 l2 至多有一个是非空的。由于输入的两个链表都是有序的,所以不管哪个链表是非空的,它包含的所有元素都比前面已经合并链表中的所有元素都要大。这时我们只需要简单地将非空链表接在合并链表的后面,并返回合并链表即可。

   //循环双指针方法
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 ==null) return l2; //处理空的情况
        if (l2 ==null) return l1;
        ListNode resultNode=new ListNode(0);
        ListNode pre =resultNode;
        while (l1!=null && l2!=null){
             if (l1.val<l2.val){//若l1的值小于l2.则指针指向l1 ,且l1自己往后挪
                 pre.next =l1;
                 l1 =l1.next;
             }else{ //若l2的值小于l1.则指针指向l2 ,且l2自己往后挪
                 pre.next =l2;
                 l2 =l2.next;
             }
             pre =pre.next;
        }
        if(l1!= null){
            pre.next =l1;
        }
        if (l2!= null){
            pre.next =l2;
        }
        return resultNode.next;
    }

方法2 递归

参考官网提示,如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表。否则,我们要判断 l1 和 l2 哪一个链表的头节点的值更小,然后递归地决定下一个添加到结果里的节点。如果两个链表有一个为空,递归结束。

    //方法2  递归的形式
    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;
        }
         l2.next = mergeTwoLists(l1,l2.next);
        return l2;
    }

提交记录

20200401134307494.png

有兴趣的老爷,还可以关注我的公众号【一起收破烂】,回复【006】获取 最新java面试资料以及简历模型120套哦~


目录
打赏
0
0
0
0
1
分享
相关文章
|
24天前
|
员工电脑监控系统中的 C# 链表算法剖析-如何监控员工的电脑
当代企业管理体系中,员工电脑监控已成为一个具有重要研究价值与实践意义的关键议题。随着数字化办公模式的广泛普及,企业亟需确保员工对公司资源的合理利用,维护网络安全环境,并提升整体工作效率。有效的电脑监控手段对于企业实现这些目标具有不可忽视的作用,而这一过程离不开精妙的数据结构与算法作为技术支撑。本文旨在深入探究链表(Linked List)这一经典数据结构在员工电脑监控场景中的具体应用,并通过 C# 编程语言给出详尽的代码实现与解析。
40 5
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
102 29
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
29 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
131 25
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
6月前
|
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
58 2
经典算法之链表篇(三)
经典算法之链表篇(三)
117 4
|
6月前
|
经典算法之链表篇(二)
经典算法之链表篇(二)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等