leetcode 21. 合并两个有序链表
题目信息
解题方法:迭代
时间复杂度0(m+n),m,n是两个链表的长度。
空间复杂度0(1),只需要常数放变量就行。
在保证能理解的情况下最大限度降低时间复杂度,这种接法对于刚开始的同学还是很友好的,是比较简单理解的一种。
** 思路**
当L1,L2都不为空时,判断L1,L2,谁的 头结点val值更小,将较小的节点放到新的链表里,每次行动后,链表的节点向后走一位,直到L1,或者L2为空为止,如果一个链表为空了,直接将另一个链表合并到新链表后面就行。
我们拿题目给出的例子过一遍。
1、先设定一个节点headprev,目的是方便返回合并后的链表,
2、比较L1,L2,的val值,发现他们一样大,这时候不妨让L1先连接上新链表,接着L1和prev都向后走一步,
3、重复上面的步骤,直到L1或者L2为空。
4将剩下不为空的链表接到新链表中结果如下
代码
class Solution
{
public ListNode mergeTwoLists(ListNode l1, ListNode l2)
{
ListNode prevhead=new ListNode(-1);
ListNode prev=prevhead;
while(l1!=null &&l2!=null)
{
if(l1.val<=l2.val)
{
prev.next=l1;
}
else
{
prev.next=l2;
l2=l2.next;
}
prev=prev.next;
}
prev.next=l1==null? l2 :l1;
return prevhead.next;
}
}
结尾
最后献上一张提交截图,恭喜恭喜啦!!!