题目:输入是两个非空链表,表示两个非负整数。数字以反序存储在单链表里,每个节点包含一个数字。将两个非负整数相加并将结果作为链表返回。假设这两个整数不包含任何前导零,除了数字0本身。
例:输入:(2 - > 4 - > 3)+(5 - > 6 - > 4) 输出: 7 - > 0 - > 8 说明: 342 + 465 = 807。
此题相当于对两个数进行求和,只不过是把两个数按从低位到高位存在链表里。过程是先计算两个个位相加,再计算两个十位相加……
此题需要考虑的特殊情况:
(1) 两个输入链表长度不一致
(2) 最高位数字相加有进位,会导致输出链表比输入链表多出一个节点
代码如下:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
#l1,l2是两个输入单链表的头节点
carry=0 #存放进位
rl=ListNode(0) #定义输出链表的头结点
ret=rl #保存输出链表的头结点,用于结果返回
while l1 or l2 or carry!=0:
sum=carry
if l1:
sum+=l1.val
l1=l1.next
if l2:
sum+=l2.val
l2=l2.next
if sum<=9:
rl.val=sum
carry=0
else:
rl.val=sum%10
carry=int(sum/10)
#如果l1和l2都没有下一个节点,且不存在进位,输出链表就 不再定义下一个节点
if (l1 or l2 or carry!=0):
rl.next=ListNode(0)
rl=rl.next
return ret