Add Two Numbers

medium, math

Question

两个非空链列代表两个非负数。 每个非负数的digits以倒序存储,链列每个节点存储一个digit。将两个非负数相加,并以链列形式返回结果

Notes

假设两个非负数没有leading 0, 除了0本身

Example
输入: (2 -> 4 -> 3) + (5 -> 6 -> 4)
输出: 7 -> 0 -> 8

Solution

从左往右相加,设置一个变量追踪两数相加是否进位。需要注意的是一个数可能比另外一个数长的情况。另外就是最后一位进位的问题(不要忽略)

下面的解法依然借助dummyHead.

        dummyHead = ListNode(0)
        p, q, cur = l1, l2, dummyHead
        carry = 0
        while p != None or q != None:
            x = p.val if p != None else 0
            y = q.val if q != None else 0
            digit = x+y+carry
            carry = digit/10
            cur.next = ListNode(digit%10)
            cur = cur.next
            if p != None:
                p = p.next
            if q != None:
                q = q.next
        if carry > 0:
            cur.next = ListNode(carry)
            
        return dummyHead.next

你可能感兴趣的:(Add Two Numbers)