📌  相关文章
📜  用链表表示的两个数字相加的Python程序 - 集 1(1)

📅  最后修改于: 2023-12-03 14:56:24.469000             🧑  作者: Mango

用链表表示的两个数字相加的Python程序 - 集 1

本篇介绍的程序是一道经典的计算题 - 如何将两个大数用链表的形式存储,并且以链表的形式计算它们的和。

问题描述

给定两个非空的链表,表示两个非负整数,其中每个节点代表一位数字。链表的头节点存储的是最高位数字。按照常规方式将两个数字相加,并将其结果以链表的形式返回。

例如:

输入: (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
总结

本题是一道经典的计算题,在考试和面试中很有可能遇到。它通过链表的方式展示了竖式相加的过程,充分体现了链表的灵活性和可拓展性。掌握本题的解题技巧可以帮助程序员更好地理解数据结构和算法。