LeetCode python 递归求解

LeetCode python recursive solution

所以我在 leetcode 讨论中看到了这个解决方案,我无法理解它。

    # Definition for singly-linked list.
    class ListNode(object):
        def __init__(self, val=0, next=None):
            self.val = val
            self.next = next

    class Solution:
        def addTwoNumbers(self, l1, l2):
            def toint(node):
                a = node.val if node else 0 
                print(a) #prints 2 4 3
       HERE===> x = node.val + 10 * toint(node.next) if node else 0
                print(x) #prints 3 4 2
                return x
            def tolist(n):
                node = ListNode(n % 10)
                if n > 9:
                    node.next = tolist(n / 10)

                return node
            return tolist(toint(l1) + toint(l2))

        
    a, a.next, a.next.next = ListNode(2), ListNode(4), ListNode(3)
    b, b.next, b.next.next = ListNode(5), ListNode(6), ListNode(4)
    result = Solution().addTwoNumbers(a, b)
    print("{0}, {1}, {2}".format(result.val, result.next.val, result.next.next.val))

我不明白的是,它是如何取一个数字,加 10 然后乘以 next,最后取反。

谁能解释一下我在此处标记的行===>

实际上并没有10的加法和反转。一些多余的括号显示了操作顺序。该行完全等同于

if node:
    x = node.val + (10 * toint(node.next))
else:
    x = 0

看起来这些链表的头部是最低有效位,因此不需要反转来添加它们。也就是说,这不是预期的解决方案,它利用了 Python 的 bignum,而不是逐个节点地添加值。