给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
提示:
- 每个链表中的节点数在范围 [1, 100] 内
- 0 <= Node.val <= 9
- 题目数据保证列表表示的数字不含前导零
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/summary-ranges
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
# 新建0开头的链表
n = ListNode(0)
t = n
# 进位数
rest = 0
# 当l1不为空或l2不为空或进位数不为0时,继续遍历
while(l1 or l2 or rest != 0):
# n1赋值为l1的当前值,如若没有则赋值为0
n1 = l1.val if l1 else 0
# 同上
n2 = l2.val if l2 else 0
# s为两数加上余数之和
s = n1 + n2 +rest
# rest得到进位数
rest = s / 10;
# t链表添加余数
t.next = ListNode(s%10)
# 指向下一位
t = t.next
# 如果l1不为空,移至下一位
if l1:
l1 = l1.next
# 同上
if l2:
l2 = l2.next
# print(n)
# n为0开头的链表,n.next 为结果
return n.next