Dadas dos listas enlazadas no vacías para representar dos enteros no negativos. Los dígitos se almacenan en orden inverso y cada nodo solo almacena un dígito. Agregue dos números para devolver una nueva lista vinculada.
Puede suponer que, a excepción del número 0, ninguno de estos dos números comienza con cero.
Entrada: (2 -> 4 -> 3) + (5 -> 6 -> 4) Salida: 7 -> 0 -> 8 Razón: 342 + 465 = 807
Originalmente, mi idea era extraer estos dos números, luego agregarlos en orden inverso y luego programar el formulario especificado en orden inverso. No sé por qué tengo que crear una lista vinculada, pero luego consulté a otros. La razón para crear la lista vinculada son los números agregados. Puede ser muy, muy grande, excediendo el número de dígitos en int32 o incluso int64, y requiere valores precisos para que no te atrevas a usar double, por lo que tienes que crear una lista enlazada para simular un sumador completo.
A continuación, usemos Python para implementar la lista vinculada
Primero, defina la clase de nodo Nodo:
class Node:
'''
data: 节点保存的数据
_next: 保存下一个节点对象
'''
def __init__(self, data, pnext=None):
self.data = data
self._next = pnext
def __repr__(self):
'''
用来定义Node的字符输出,
print为输出data
'''
return str(self.data)
Código:
#class ListNode:
#def __init__(self, x):
#self.val = x
#self.next = None
class Solution:
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
# 创建一个节点,其中有两个指针,dummy用来输出最后的结果,cur用来移动指针
dummy = cur = ListNode(0)
# carry 用来计算数字加和和表示进位
carry = 0
while l1 or l2 or carry:
if l1:
carry += l1.val
l1 = l1.next
if l2:
carry += l2.val
l2 = l2.next
# 计算当前位的数字加和:0~9
cur.next = ListNode(carry % 10)
cur = cur.next
# 用来表示进位
carry = carry // 10
return dummy.next
Resumen: Dado que no estoy muy familiarizado con la estructura de datos, se puede considerar que estoy aprendiendo a usar Python para practicar la estructura de datos, crear listas enlazadas, etc., aprender lentamente ~