迭代
迭代
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def mergeTwoLists(self, list1, list2):
"""
:type list1: Optional[ListNode]
:type list2: Optional[ListNode]
:rtype: Optional[ListNode]
"""
start = ListNode(0, None)
point = start
while list1 or list2:
if list1 is None:
point.next = list2
point = point.next
list2 = list2.next
elif list2 is None:
point.next = list1
point = point.next
list1 = list1.next
elif list1.val >= list2.val:
point.next = list2
point = point.next
list2 = list2.next
else:
point.next = list1
point = point.next
list1 = list1.next
return start.next
迭代(简化)
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def mergeTwoLists(self, list1, list2):
"""
:type list1: Optional[ListNode]
:type list2: Optional[ListNode]
:rtype: Optional[ListNode]
"""
start = ListNode(0, None)
point = start
while list1 and list2:
if list1.val >= list2.val:
point.next = list2
list2 = list2.next
else:
point.next = list1
list1 = list1.next
point = point.next
point.next = list1 if list1 is not None else list2
return start.next
递归
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def mergeTwoLists(self, list1, list2):
"""
:type list1: Optional[ListNode]
:type list2: Optional[ListNode]
:rtype: Optional[ListNode]
"""
if list1 is None:
return list2
elif list2 is None:
return list1
elif list1.val >= list2.val:
list2.next = self.mergeTwoLists(list1, list2.next)
return list2
else:
list1.next = self.mergeTwoLists(list1.next, list2)
return list1
总结
1、本题较简单,使用归并排序即可。
2、学习通过递归排序的方法。
3、在递归调用自身时,self.mergeTwoLists(list1, list2.next);self.mergeTwoLists(list1.next, list2)
,使用“self.xx”。