LeetCode 21 合并两个有序链表 Python3

主要难点:Python的链表使用

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        if not l1:
            return l2
        if not l2:
            return l1
        Head = ListNode(0)
        p=Head
        while l1 and l2:
            if l1.val < l2.val:
                p.next=ListNode(l1.val)
                p=p.next
                l1=l1.next
            elif l1.val == l2.val:
                p.next=ListNode(l1.val)
                p=p.next
                p.next=ListNode(l2.val)
                p=p.next
                l1=l1.next
                l2=l2.next
            else:
                p.next=ListNode(l2.val)
                p=p.next
                l2=l2.next
        if l2:
            p.next=l2
            p=p.next
        if l1:
            p.next=l1
            p=p.next
        
        return Head.next

简化(官方版):

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        if not l1:
            return l2
        if not l2:
            return l1
        Head = ListNode(0)
        p=Head
        while l1 and l2:
            if l1.val <= l2.val:
                p.next=ListNode(l1.val)
                p=p.next
                l1=l1.next
            else:
                p.next=ListNode(l2.val)
                p=p.next
                l2=l2.next
        
        p.next = l1 if l1 is not None else l2
        
        return Head.next

递归版:

需要理解

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        if not l1:
            return l2
        if not l2:
            return l1

        if l1.val < l2.val:
            l1.next = self.mergeTwoLists(l1.next,l2)
            return l1
        else:
            l2.next = self.mergeTwoLists(l1,l2.next)
            return l2

猜你喜欢

转载自blog.csdn.net/mxxxkuku/article/details/114448608
今日推荐