刷尽天下 -- LeetCode 2 -- Add Two Numbers(两数相加)

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

题目分析:

这道题不难,但是有三点需要注意,尤其是第三点:

链表对应结点相加时增加前一个结点的进位,并保存下一个结点的进位;
两个链表长度不一致时,要处理较长链表剩余的高位和进位计算的值,例如:23+320=343;
如果最高位计算时还产生进位,则还需要添加一个额外结点,例如:4+6=10。

python:

递归解法

这个题的递归解法也是非常好玩的,如果两个链表节点都存在的话,把两个节点的值相加并且模10作为当前的结果,同时如果这个结果>=10需要把它的next节点+1。

这个解法妙在天然地处理好了两个链表不一样长、最终相加结果有进位的情况。

# Definition for singly-linked list.
# class ListNode(object):
#     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
        """
        def addIter(l1, l2):
            if not l1: return l2
            if not l2: return l1

            sum = l1.val + l2.val  
            res = ListNode(sum % 10)
            res.next = addIter(l1.next, l2.next)
           
            if sum >= 10:
                res.next = addIter(res.next, ListNode(1))
            return res
        res = addIter(l1,l2)
        return res
            
发布了104 篇原创文章 · 获赞 97 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/weixin_37947156/article/details/100168039