【Leetcode刷题-python】2.Add Two Numbers

题目:输入是两个非空链表,表示两个非负整数。数字以反序存储在单链表里,每个节点包含一个数字。将两个非负整数相加并将结果作为链表返回。假设这两个整数不包含任何前导零,除了数字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

猜你喜欢

转载自blog.csdn.net/hgfgfdfdff/article/details/89355693