2.两数相加(Python实现)

2.两数相加(Python实现)_第1张图片
思路

我们使用变量来跟踪进位,并从包含最低有效位的表头开始模拟逐位相加的过程。
2.两数相加(Python实现)_第2张图片对两数相加方法的可视化: 342 + 465 = 807342+465=807, 每个结点都包含一个数字,并且数字按位逆序存储。

算法

就像你在纸上计算两个数字的和那样,我们首先从最低有效位也就是列表 l1和 l2 的表头开始相加。由于每位数字都应当处于 0 - 9 的范围内,我们计算两个数字的和时可能会出现“溢出”。例如,5 + 7 = 125+7=12。在这种情况下,我们会将当前位的数值设置为 22,并将进位 flag = 1 带入下一次迭代。进位flag 必定是 0 或 1,这是因为两个数字相加(考虑到进位)可能出现的最大和为 9 + 9 + 1=19。
代码

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None
 
class Solution(object):
    
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        if l1 is None:
            return l2
        if l2 is None:
            return l1
 
        tmp = ListNode(0)#ListNode()为LeetCode给出的函数,代码块顶部有详细定义
        res = tmp
        flag = 0
        while l1 or l2:
            tmpsum = 0
            if l1:
                tmpsum = l1.val
                l1 = l1.next
            if l2:
                tmpsum += l2.val
                l2 = l2.next
            tmpres = ((tmpsum + flag) % 10)
            flag = ((tmpsum + flag) // 10)
            res.next = ListNode(tmpres)
            res = res.next
        if flag:
            res.next = ListNode(1)
        res = tmp.next
        del tmp
        return res
        

你可能感兴趣的:(2.两数相加(Python实现))