这是LeetCode上的「21.合并两个有序链表」,难度为「Easy」。
将两个升序链表合并为一个新的「升序」链表并返回。
新链表是通过拼接给定的两个链表的所有节点组成的。
示例1:
输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]
示例2:
输入:l1=[],l2=[]输出:[]
示例3:
输入:l1=[],l2=[0]输出:[0]
提示:
两个链表的节点数目范围是[0,50]-=Node.val=l1和l2均按「非递减顺序」排列双指针解法(哨兵技巧)哨兵技巧我们之前在2.两数相加(中等)讲过啦,让三叶来帮你回忆一下:
做有关链表的题目,有个常用技巧:添加一个虚拟头结点(哨兵),帮助简化边界情况的判断。
由于两条链表本身就是有序的,只需要在遍历过程中进行比较即可:
代码:
classSolution{publicListNodemergeTwoLists(ListNodel1,ListNodel2){if(l1==null)returnl2;if(l2==null)returnl1;ListNodedummy=newListNode(0);ListNodecur=dummy;while(l1!=nulll2!=null){if(l1.vall2.val){cur.next=l1;cur=cur.next;l1=l1.next;}else{cur.next=l2;cur=cur.next;l2=l2.next;}}while(l1!=null){cur.next=l1;cur=cur.next;l1=l1.next;}while(l2!=null){cur.next=l2;cur=cur.next;l2=l2.next;}returndummy.next;}}
时间复杂度:对两条链表扫描一遍。复杂度为
空间复杂度:
最后
这是我们「刷穿LeetCode」系列文章的第No.21篇,系列开始于/01/01,截止于起始日LeetCode上共有道题目,部分是有锁题,我们将先将所有不带锁的题目刷完。
在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。
为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库: