面试题 02.05. 链表求和

给定两个用链表表示的整数,每个节点包含一个数位。

这些数位是反向存放的,也就是个位排在链表首部。

编写函数对这两个整数求和,并用链表形式返回结果。

 

示例:

输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
进阶:思考一下,假设这些数位是正向存放的,又该如何解决呢?

示例:

输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295
输出:9 -> 1 -> 2,即912

 

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

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        cur=res=ListNode(-1)
        carry_bit=0
        while l1 and l2:
            num=l1.val+l2.val+carry_bit
            l1.val=num%10
            carry_bit=num//10
            cur.next=l1
            cur=cur.next
            l1,l2=l1.next,l2.next
        
        left=None
        if l1:
            left=l1
        else:
            left=l2
        while left and carry_bit>=0:
            num=left.val+carry_bit
            left.val=num%10
            carry_bit=num//10
            cur.next=left
            cur=cur.next
            left=left.next
        if carry_bit>0:
            cur.next=ListNode(carry_bit)
        return res.next

 

posted @ 2020-09-24 18:54  XXXSANS  阅读(170)  评论(0编辑  收藏  举报