📅  最后修改于: 2023-12-03 14:56:24.469000             🧑  作者: Mango
本篇介绍的程序是一道经典的计算题 - 如何将两个大数用链表的形式存储,并且以链表的形式计算它们的和。
给定两个非空的链表,表示两个非负整数,其中每个节点代表一位数字。链表的头节点存储的是最高位数字。按照常规方式将两个数字相加,并将其结果以链表的形式返回。
例如:
输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出: 7 -> 8 -> 0 -> 7
解释: 3427 + 465 = 3892,即 7 -> 8 -> 0 -> 7
本题可以通过模拟竖式相加的方式进行求解。从链表的最低位开始相加,如果相加的结果超过 10,则将进位部分留到下一位相加时使用。
需要注意的是,由于链表的长度可能不相等,千万不能忘记在较短的链表末尾补充 0,否则会导致程序的异常。
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
dummy = ListNode(0)
curr = dummy
carry = 0
while l1 or l2 or carry:
x = l1.val if l1 else 0
y = l2.val if l2 else 0
s = x + y + carry
carry = s // 10
curr.next = ListNode(s % 10)
curr = curr.next
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
return dummy.next
本题是一道经典的计算题,在考试和面试中很有可能遇到。它通过链表的方式展示了竖式相加的过程,充分体现了链表的灵活性和可拓展性。掌握本题的解题技巧可以帮助程序员更好地理解数据结构和算法。