LeetCode_One question per day_python_La segunda pregunta suma dos números

Se dan dos listas enlazadas no vacías para representar dos enteros no negativos. Entre ellos, sus respectivos dígitos están en orden inverso

Cada nodo solo puede almacenar un dígito. Si sumamos estos dos números,

Devolverá una nueva lista vinculada para representar su suma. Puede suponer que además del número 0, ninguno de estos dos números terminará en

Empiece con 0.

Ejemplo:

Entrada: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Salida: 7 -> 0 -> 8
Razón: 342 + 465 = 807

Fuente: LeetCode

# 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:
        a = ListNode(0) # 创建一个链表 第一个数据初始值为0
        l3 = a  
        c = 0   #   进位
        while l1 or l2:
            x = l1.val if l1 else 0 #   没有下一节点时取0
            y = l2.val if l2 else 0
            tmp = x + y
            if tmp + c < 10:
                l3.next = ListNode(tmp + c)
                c = 0   # 不进位  2 + 5 = 7  清零
            else:
                l3.next = ListNode(tmp + c - 10)
                c = 1   # 需要的进位 4 + 6 = 10   十位数的1往前进位
            if l1:
                l1 = l1.next    # 下一节点
            if l2:
                l2 = l2.next
            l3 = l3.next
        if c == 1:
          #  l3.val %= 10
            l3.next = ListNode(1)   # 最后一个进位增加一个末尾节点 元素为 1
        return a.next   # a 的第一个是 0 因此去头节点


 

Supongo que te gusta

Origin blog.csdn.net/qq_42548880/article/details/108375844
Recomendado
Clasificación