模拟
方法一递归
参考代码
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution:def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:if not list1:return list2if not list2:return list1merge = Noneif list1.val < list2.val:merge = ListNode(list1.val)list1 = list1.nextelse:merge = ListNode(list2.val)list2 = list2.nextmerge.next = self.mergeTwoLists(list1,list2)return merge
复杂度分析
时间复杂度 O(n + m) n和n是链表的长度
空间复杂度 O(n + m) 主要是递归调用栈的开销
方法二迭代
参考代码
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution:def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:pre = ListNode()cur = prewhile list1 or list2:if not list1:cur.next = list2breakif not list2:cur.next = list1breakif list1.val < list2.val:cur.next = list1list1 = list1.nextelse:cur.next = list2list2 = list2.nextcur = cur.nextreturn pre.next
复杂度分析
时间复杂度 O(n + m) n和n是链表的长度
空间复杂度 O(1)
