1.题目描述:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
2.分析
这个问题首先是一个链表问题,取出每个链表中的每一个节点进行相加,需要用一个变量去承接进位值。考虑的边界条件有两个,一个是两个链表的长度不一致,另一个是最后两个节点相加完有进位值。
3.解决
# 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
"""
add = 0 # 设定增加的值为0
head = ListNode(0) # 先设定一个头节点
node = head # 设置当前节点
while l1 or l2: # 循环结束条件为l1 且 l2 已经没有下一个节点了
cur = ListNode(add) # 生成一个节点
if l1:
cur.val += l1.val # 当l1有节点的情况,增加值
l1 = l1.next # l1 取到下一个节点
if l2:
cur.val += l2.val
l2 = l2.next
add = cur.val // 10 # 取除完10的余数
cur.val = cur.val % 10 # 取对10取的商值
node.next, node = cur, cur # 变换节点
if add:
node.next = ListNode(add)
return head.next