标签:return 序列表 44 L1 Lists next l2 l1 mergeTwoLists
【题目】
将两个有序链表合并成一个有序链表
Merge two sorted linked lists and return it as a sorted list. The list should be made by splicing together the nodes of the first two lists.
Example 1:
Input: l1 = [1,2,4], l2 = [1,3,4] Output: [1,1,2,3,4,4]
Example 2:
Input: l1 = [], l2 = [] Output: []
Example 3:
Input: l1 = [], l2 = [0] Output: [0]
【思路】
是把l1/l2的next指针向着对方或者自己的next相连
要想清楚为什么return L1/L2,他俩就能连一起,得到最终结果
if(l1.val<=l2.val){ l1.next= mergeTwoLists(l1.next,l2); return l1; } else{ l2.next= mergeTwoLists(l1,l2.next); return l2; }
L1<L2时,l1.next=l2, 连后主动权在l1,返回l1
L1>L2时,l2.next=l1, 连后主动权在l2,返回l2
============
虽然是个简单题但之前大晚上脑袋瓦特想歪了……错误思路也记下
L1<L2时,l1.next=l2, 返回l1
L1>L2时,l2.next=l2.next, 返回l2
看上去在分别处理,互不干扰死循环??
醒醒,写成下面这样才叫互不干扰……上面其中一个指针动了,另一个没动,动了的指针就连到没动那了
l1.next= mergeTwoLists(l1.next,l2.next);
l2.next= mergeTwoLists(l1.next,l2.next);
【代码】
class Solution { 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; } else{ l2.next= mergeTwoLists(l1,l2.next); return l2; } } }
Q:为什么其中一个为null,就返回另一个?
A:因为是有序的,另一个剩余部分也是有序的,不用再遍历。
Q:为什么返回的另一个里就一定是结果?这里l1 l2代表的到底是什么,为什么是整串数而不是一部分
A:倒推,合并后的数列长度一定更长。那剩到最后返回的肯定是更长的。
标签:return,序列表,44,L1,Lists,next,l2,l1,mergeTwoLists 来源: https://www.cnblogs.com/inku/p/15207705.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。