力扣刷题(python)50天——第十二天:合并两个有序链表
题目描述
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法
迭代与递归的思想,逐一遍历检测。
解答
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if l1==None:
return l2
if l2==None:
return l1
if l1.val>l2.val:
l3=l2
l2=l2.next
else:
l3=l1
l1=l1.next
l4=l3
while 1:
if l1!=None and l2!=None:
if l1.val>l2.val:
l3.next=l2
l3=l3.next
l2=l2.next
else:
l3.next=l1
l3=l3.next
l1=l1.next
elif l1==None and l2!=None:
l3.next=l2
break
elif l1!=None and l2==None:
l3.next=l1
break
return l4
执行结果
参考改进:
直接使用函数递归进行操作:
class Solution:
def mergeTwoLists(self, l1, l2):
if l1 is None:
return l2
elif l2 is None:
return l1
elif l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
作者:LeetCode
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
心得:
起初没有l4,最后直接返回了l3,一直不知道怎么错了,其实是因为l3链表此时不在头部位置,故只会返回标记处及之后的链表。因此需要单独把头部进行标记,最后返回头部,l3为方便操作而设置。