将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
Python解法1:递归
比较两个链表的头部值哪个更小,更小的那个元素将被添加到新的链表中,然后比较下一组,以此类推直到出现空值。
class Solution:
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
if list1 is None:
return list2
elif list2 is None:
return list1
elif list1.val<list2.val:
list1.next = self.mergeTwoLists(list1.next,list2)
return list1
else:
list2.next = self.mergeTwoLists(list1,list2.next)
return list2
结果:
解法2:迭代
设定一个哨兵节点怕prehead,比较两个链表中的头部值,选出其中的较小值放入哨兵节点后面,然后接着比较下一组,以此类推直到出现空值。
class Solution:
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
prehead = ListNode(-1)
prev = prehead
while list1 and list2:
if list1.val<=list2.val:
prev.next = list1
list1 = list1.next
else:
prev.next = list2
list2 = list2.next
prev = prev.next
if list1 is not None:
prev.next = list1
else:
prev.next = list2
return prehead.next
结果: