刷力扣热题–第十六天:21.合并两个有序链表
菜鸟第十六天开始奋战敲代码,持之以恒,见证成长
1.题目简介
2.题目解答
主打一个分叉,减枝.选出所有可能性去规避,时间复杂度O(N+M),空间复杂度O(1)–只包含链表头的存储,实现如下:
实现了,看大家做的时候会选择用递归做,一步一步的进行迭代,实现一下:
结果竟然显示没有刚才方法高效,但这种方法的思想还是很值得去借鉴的.听难想的,不看很难想出来感觉~
3.心得体会
这道题是简单题,想起来不难,但找一个合适的方案还是需要好好思考一下的~
初始代码:
class Solution(object):
def mergeTwoLists(self, list1, list2):
"""
:type list1: Optional[ListNode]
:type list2: Optional[ListNode]
:rtype: Optional[ListNode]
"""
if list1 is None or list2 is None:
if list1 is not None:
return list1
elif list2 is not None:
return list2
else:
return None
if list1 is not None and list2 is not None:
if list1.val <= list2.val:
temp = list1
list1 = list1.next
else:
temp = list2
list2 = list2.next
temp_list = temp
while list1 is not None or list2 is not None:
if list1 is None and list2 is not None:
temp.next = list2
list2 = list2.next
if list1 is not None and list2 is None:
temp.next = list1
list1 = list1.next
if list1 is not None and list2 is not None:
if list1.val <= list2.val:
temp.next = list1
list1 = list1.next
else:
temp.next = list2
list2 = list2.next
temp = temp.next
return temp_list
改进代码:
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
if list2 is None:
return list1
if list1.val < list2.val:
list1.next = self.mergeTwoLists(list1.next,list2)
return list1
else:
list2.next = self.mergeTwoLists(list1,list2.next)
return list2
4.做题时长
7月21日19:30-20:14