Algoritmo: la lista enlazada imita la suma de números enteros 2. Suma dos números

2. Suma dos números

Se le dan dos listas enlazadas no vacías que representan dos enteros no negativos. Los dígitos se almacenan en orden inverso y cada uno de sus nodos contiene un solo dígito. Sume los dos números y devuelva la suma como una lista enlazada.
Puede suponer que los dos números no contienen ningún cero inicial, excepto el propio número 0.

Ejemplo 1:

Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.

Ejemplo 2:

Input: l1 = [0], l2 = [0]
Output: [0]

Ejemplo 3:

Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]

Restricciones:

  • El número de nodos en cada lista enlazada está en el rango [1, 100].
  • 0 <= Nodo.val <= 9
  • Se garantiza que la lista representa un número que no tiene ceros a la izquierda.

Solución de lista enlazada, preste atención al límite de acarreo y al último acarreo

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        result = result_head = ListNode(-1)
        carry = 0
        while l1 != None or l2 != None or carry != 0:
            l1_val = l1.val if l1 else 0
            l2_val = l2.val if l2 else 0
            new_val = l1_val + l2_val + carry
            carry = new_val // 10
            result.next = ListNode(new_val % 10)
            result = result.next
            l1 = l1.next if l1 else None
            l2 = l2.next if l2 else None

        return result_head.next

Supongo que te gusta

Origin blog.csdn.net/zgpeace/article/details/131373941
Recomendado
Clasificación