首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode-21.Merge Two Sorted Lists | 合并两个有序链表

LeetCode-21.Merge Two Sorted Lists | 合并两个有序链表

作者头像
Zoctopus
发布2021-02-25 17:15:19
2090
发布2021-02-25 17:15:19
举报

题目

LeetCode LeetCode-cn

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]
 

Constraints:
The number of nodes in both lists is in the range [0, 50].
-100 <= Node.val <= 100
Both l1 and l2 are sorted in non-decreasing order.

题解

这道题是经典的考察链表的题目。

解法一:递归

  • 终止条件:两条链表分别名为 l1l2,当 l1 为空或 l2 为空时结束
  • 返回值:每一层调用都返回排序好的链表头
  • 本级递归内容:如果 l1val 值更小,则将 l1.next 与排序好的链表头相接,l2 同理
  • O(m+n)O(m+n)mml1的长度,nnl2 的长度
//Go
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
    if l1 == nil {
        return l2;
    }else if l2 == nil {
        return l1;
    }else if (l1.Val < l2.Val) {
        l1.Next = mergeTwoLists(l1.Next, l2);
        return l1;
    }else {
        l2.Next = mergeTwoLists(l1, l2.Next);
        return l2;
    }
}

执行结果:

leetcode-cn:
执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:2.6 MB, 在所有 Go 提交中击败了26.43%的用户

leetcode:
Runtime: 0 ms, faster than 100.00% of Go online submissions for Merge Two Sorted Lists.
Memory Usage: 2.6 MB, less than 51.09% of Go online submissions for Merge Two Sorted Lists.

可以看到,该解法执行用时为0ms,非常高效。

链接

力扣-画解算法:21. 合并两个有序链表

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 题解
    • 解法一:递归
    • 链接
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档