算法练习-第二天(合并两个排序的链表)

Posted 旷世奇才李先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法练习-第二天(合并两个排序的链表)相关的知识,希望对你有一定的参考价值。

业精于勤荒于嬉

🐧主页详情:旷世奇才李先生主页
📢作者简介:🏅优质创作者🏅 and 🏅阿里专家博主🏅 and 🏅华为云享专家🏅
✍️人生格言:把一生一分为二,前半生不犹豫,后半生不后悔
🧑‍💻人生目标:做自己想做的
👻如果觉得博主的文章还不错的话,请三连支持一下博主哦
💬给大家介绍一个我一直在用的求职刷题收割offe👉点击进入网站

文章目录


前言

对于程序员来说算法属于基本功,掌握了算法就能够写出更高效的代码,所以我们要现在还是进行日常的刷题练习,养兵千日用兵一时,大家一定要多多练习

大家一定要合理运用好日常的时间来刷题。

一、合并两个排序的链表

描述
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。

要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)

如输入1,3,5,2,4,6时,合并后的链表为1,2,3,4,5,6,所以对应的输出为1,2,3,4,5,6,

二、题解

public class Solution 
    public ListNode Merge(ListNode list1,ListNode list2) 
        // list1 list2为空的情况
        if(list1 == null || list2 == null)
            return list1 != null ? list1 : list2;
        
        // 两个链表元素依次对比
        if(list1.val <= list2.val)
            // 递归计算 list1.next, list2
            list1.next = Merge(list1.next, list2);
            return list1;
        else
            // 递归计算 list1, list2.next
            list2.next = Merge(list1, list2.next);
            return list2;
         
    


三、分析

1、解决方式(递归)

特殊情况:如果有一个链表为空,返回另一个链表
如果pHead1 节点值比小pHead2,下一个节点应该是 pHead1,应该return pHead1,在return之前,指定pHead1的下一个节点应该是pHead1.next和pHead2俩链表的合并后的头结点
如果pHead1 节点值比pHead2大,下一个节点应该是pHead2,应该return pHead2,在return之前,指定pHead2的下一个节点应该是pHead1和pHead2.next俩链表的合并后的头结点

1、首先是两个链表

2、判断两个链表是否有空链表的情况,如果有空链表的情况直接返回另一个链表即可。

如果没有空链表的情况就比较两个链表的值

// 两个链表元素依次对比
        if(list1.val <= list2.val)
            // 递归计算 list1.next, list2
            list1.next = Merge(list1.next, list2);

这里如果list1的值小于list2的值,那么list1的next应该指向list1的next和list2比较哪个值更小。

最终合并为一个链表

复杂度分析:
时间复杂度O(N+M):M N分别表示pHead1, pHead2的长度
空间复杂度O(N+M):迭代次数占用空间

2、测试提交

代码写完了就需要先自测一下,这个时候我们点击自测运行看一看能不能测试通过。

这里我们可以看到自测成功了,那我们就点击保存并提交来提交此题。

提交答案后会显示我们此题的运行时间以及占用内存,并且判断我们这两项超过了其他百分之多少的人,我们还可以点击进入下一题来接着进行刷题,这样会越刷越上瘾的。

四、总结

可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。

以上是关于算法练习-第二天(合并两个排序的链表)的主要内容,如果未能解决你的问题,请参考以下文章

算法练习-第二天(合并两个排序的链表)

算法剑指 Offer 25. 合并两个排序的链表

合并两个排序的链表

leetcode-合并两个排序的链表-66

《剑指Offer——合并两个排序的链表,两个链表的第一个公共节点》代码

最强解析面试题:合并两个排序的链表