2025.1.26 持续学习 写点算法
思路受到了些许阻碍,先写写算法,找找状态吧
第三题(简单)合并两个有序链表
题目:将 两个 升序 链表 合并 为一个新的 升序 链表并返回。新链表是通过 拼接 给定的两个链表的 所有节点 组成的。
目的:获得一个新的升序链表
1 -> 3 -> 5 + 2 -> 4 -> 6 = 1 -> 2 -> 3 -> 4 -> 5 -> 6
注意:其实是非降序链表,所以包括 单节点的链表,想同数据的链表。(不过好像没什么太大关系哈哈哈)
思路:
1、拿任意一个链表(L1)与另一个链表(L2)对比,从头节点开始,如果**L1**大于等于
L2 的节点值就插入(指向的改变)到这个节点后面。
2、用什么算法可以实现?
- 暴力
2. 递归 -- 解 1
3. 迭代 -- 解 2
解:
1. 递归
操作:
(1) 先判断两个链表的头结点谁大谁小。
if (L1Head ? L2Head);
(2) 根据两个链表从头节点开始的节点大小对比改变 节点指向,从而获得新的链表
如 L1 < L2 , 会出现 L1.next -> L2,再次递归 L2 的指向,L2.next -> 下一个(L1和L2)的对比。
▼text复制代码L1 -> ( L1.next ? L2 ) -> L1.next(小) -> ( L1.next.next ? L2 ) -> L2(小) -> ( L1.next ? L2.next )
▼java复制代码class Solution { 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; } } }
2. 迭代
操作:
(1)设置一个哨兵节点-- prehead(更好返回链表),然后维护一个指针 prev,指针指向两个链表 L1 和 L2 当前节点 较小的节点,然后 指向完毕后 prev 会去到 prev指向的位置。
L1.val ? L2.val prev = prev.next;
(2)完成比较后,至多 有一个链表 会是 非空的,因为经过比较,所以这个链表包含的元素都比合并的目的链表中等元素都要大。这样我们可以直接将其简单的接在目的链表后即可完成最后的合并。
prev.next = L1 == null ? L2 : L1;
(3)最后可以通过 prehead.next 返回目的链表
▼java复制代码class Solution { public ListNode mergeTwoLists( ListNode L1, ListNode L2 ) { // 后续需要注意 这个是新建节点 得用 new ListNode preNode = new ListNode(-1); ListNode prev = preNode; // 循环 对比节点值,并且完 成prev 指针的指向更改 while ( L1 != null && L2 != null ) { if ( L1.val <= L2.val ) { prev.next = L1; L1 = L1.next; } else { prev.next = L2; L2 = L2.next; } prev = prev.next; } // 合并 剩余的至多一个的非空链表 prev.next = L1 == null ? L2 : L1; return preNode.next; } }
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
Day 29✅ 今天做了:Redis消息队列⏰ 明天计划:继续学消息队列
2
Day 17🧭行动:学习了Python最后一个知识点:异常处理🤓体会:Python 程序一旦发生异常,如果没有捕获处理,程序就会直接崩溃终止。使用"try-except"捕获异常,可以预先写好异常处理方案:比如打印友好提示、记录日志、释放资源,保证程序不会直接退出,还能继续运行。🧑💻代码:try:print("================================")# pri
2
Day1今天学习了java中if的使用
2
day 61今天来学校上课了,和教授谈了,可以接下RA工作,不过一周只能charge 10h, 工资很少,不过一个月600刀也勉强比没有好。今天的工作还没做完,最近在做知识库构造,Ui/UX上周就设计完,现在在做底座的建设今天也让Claude直接帮我把Neetcode150 题目+解题思路+代码给我整理了,我发现我真的只有找碎片化时间才能做题,我还不如先背先回忆(之前都做过)祝祖国母亲节日快乐,也
2
Day 1✅ 今天做了:⏰ 明天计划:📚 今日感悟:
0
