题目 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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.
题解 这道题是经典的考察链表的题目。
解法一:递归
终止条件:两条链表分别名为 l1
和 l2
,当 l1
为空或 l2
为空时结束
返回值:每一层调用都返回排序好的链表头
本级递归内容:如果 l1
的 val
值更小,则将 l1.next
与排序好的链表头相接,l2
同理
O(m+n)O(m+n)
,mm
为 l1
的长度,nn
为 l2
的长度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 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; } }
执行结果:
1 2 3 4 5 6 7 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. 合并两个有序链表