给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 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