给你两个 非空 的链表表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的并且每个节点只能存储 一位 数字。请你将两个数相加并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外这两个数都不会以 0 开头。通过python实现
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def addTwoNumbers(l1: ListNode, l2: ListNode) -> ListNode:
carry = 0
head = ListNode(0)
current = head
while l1 or l2 or carry:
val1 = l1.val if l1 else 0
val2 = l2.val if l2 else 0
val = val1 + val2 + carry
carry = val // 10
current.next = ListNode(val % 10)
current = current.next
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
return head.next
首先,我们定义一个 ListNode 类,表示链表节点。每个节点包含一个整数值和一个指向下一个节点的指针。
接着,我们定义一个名为 addTwoNumbers 的函数,接受两个参数 l1 和 l2,分别表示要相加的两个链表。
我们使用 carry 变量来表示进位,初始化为 0。我们还创建一个名为 head 的 ListNode 对象,作为新链表的头节点,并创建一个名为 current 的指针,指向新链表的尾节点。
我们使用 while 循环来遍历两个链表,以及进位。如果 l1 或 l2 或 carry 不为空,我们就进入循环体。
在循环体内,我们分别获取 l1 和 l2 的当前节点的值,如果它们为空,则值为 0。我们将这两个值和 carry 相加,得到当前位的和 val。然后,我们计算新的进位值 carry,并将当前位的值加入新链表中。
最后,我们将 l1 和 l2 的指针向前移动一位,如果它们为空,则将对应的值设为 None。
最后,我们返回新链表的头节点(head.next)
原文地址: https://www.cveoy.top/t/topic/eQvP 著作权归作者所有。请勿转载和采集!