题目:
剑指 Offer 25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
链接:剑指 Offer 25. 合并两个排序的链表
注意:本题与主站 21 题相同:https://leetcode-cn.com/problems/merge-two-sorted-lists/
示例:
限制:0 <= 链表长度 <= 1000
思路:
采用递归方法,终止条件为任意一条链表为空时,递归内容为比较两个链表当前节点值的大小,小的一条则继续将该节点的下一个节点与之比较。
代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
if not l1:
return l2
if not l2:
return l1
if l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
时间复杂度O(M+n),空间复杂度O(m+n).