数据结构论坛

首页 » 分类 » 常识 » 面试高频系列一道结合简单数据结构
TUhjnbcbe - 2021/5/25 21:23:00
题目描述

这是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上共有道题目,部分是有锁题,我们将先将所有不带锁的题目刷完。

在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。

为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:

1
查看完整版本: 面试高频系列一道结合简单数据结构