第十四次作业

leetcode题目:


解题思路:

解决问题的关键是模仿加法的进位

1. 新建一个空链表L3,初始化进位carry为0

2. 从头开始分别遍历输入的两个链表L1,L2,直到有一个链表为空为止

  2.1 将L1和L2的元素和carry相加,模10,得商和余数,carry赋值为商

  2.2 若L3为空,L3新建节点,赋值为2.1所得余数

  2.3 如L3不为空,L3新建下一个节点,赋值为2.1所得余数

3. 经过上述步骤,肯定有一个输入链表为空

  3.1 若两个链表都为空,到第4步

  3.2 存在一个链表非空,不妨设为L,重复2中步骤,区别在于相加的元素为L的元素和carry

4. 最后判断一下carry是非为0

  4.1 为0,直接返回L3的头部

  4.2 不为0,L3新建下一个节点,值为carry,返回L3的头部

代码:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        if not l1:
            return l2
        elif not l2:
            return l1
        else:
            carry=0
            l3=None
            l3_head=None
            while l1 and l2:
                tmp1,tmp2=l1,l2
                l1,l2=l1.next,l2.next
                carry, value = divmod(tmp1.val + tmp2.val + carry, 10)
                if l3:
                    l3.next=ListNode(value)
                    l3=l3.next
                else:
                    l3_head=l3=ListNode(value)
            while l1:
                carry,value=divmod(l1.val+carry,10)
                l3.next=ListNode(value)
                l1,l3=l1.next,l3.next
            while l2:
                carry, value = divmod(l2.val + carry, 10)
                l3.next = ListNode(value)
                l2, l3 = l2.next, l3.next
            if carry:
                l3.next=ListNode(carry)
            return l3_head

# l1=ListNode(5)
# l1.next=ListNode(9)
# l2=ListNode(6)
# sol=Solution()
# l3=sol.addTwoNumbers(l1,l2)
# while l3:
#     print(l3.val)
#     l3=l3.next

结果:



猜你喜欢

转载自blog.csdn.net/weixin_39367127/article/details/80138683