算法练习-第二天(合并两个排序的链表)
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面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。
以上是关于算法练习-第二天(合并两个排序的链表)的主要内容,如果未能解决你的问题,请参考以下文章