题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
输入:l1 = [], l2 = []
输出:[]
解法一
迭代,两个链表每次选择最小的加入,加入后指针向后移。
class Solution:
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
res=ListNode(0)
p=res
p1=list1
p2=list2
while p1!=None and p2!=None:
if p1.val>p2.val:
p.next=p2
p=p.next
p2=p2.next
else:
p.next=p1
p=p.next
p1=p1.next
if p1!=None:
p.next=p1
if p2!=None:
p.next=p2
return res.next
解法二
递归,如果两个链表某一个为空时返回另一个,其余的选择两个链表中小的节点,将其next指向其余结点的合并结果。(调用递归)
class Solution:
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
if list1==None:
return list2
if list2==None:
return list1
if list1.val<list2.val:
list1.next=self.mergeTwoLists(list1.next,list2) #调用自身函数要用self.
return list1
else:
list2.next=self.mergeTwoLists(list2.next,list1)
return list2