LeetCode 21.合并两个有序链表
反转链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
输入:l1 = [1,2,4], l2 = [1,3,4] |
方法一:递归
算法思路:
比较两个链表的头部值,较小的一个节点与剩下元素的merge
操作结果合并。
代码实现:
class Solution { |
复杂度分析:
- 时间复杂度:,其中和是链表的长度,至多只会递归调用两个链表的每个节点一次。
- 空间复杂度:,同上。
方法二:双指针
算法思路:
- 设置一个哨兵节点
prehead
,以便最后返回合并后的链表。 - 维护
prev
指针,比较l1
与l2
的节点值,若l1
小于l2
,则将l1
当前节点接在prev
后面,同时将l1
指针后移一位。对l2
同理,如此循环直至l1
或l2
指向了null
。 - 循环终止时,合并剩余的非空链表。
代码实现:
class Solution { |
复杂度分析:
-
时间复杂度:,。其中和是链表的长度,
while
循环的次数不会超过两个链表的长度之和。 -
空间复杂度:,只需要常数的空间存放若干变量。
参考:
合并两个有序链表 - 合并两个有序链表 - 力扣(LeetCode)
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Abacteria的学习小站!