LeetCode02-两数相加
1 ''' 2 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 3 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 4 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 5 示例: 6 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 7 输出:7 -> 0 -> 8 8 原因:342 + 465 = 807 9 ''' 10 11 12 class ListNode: 13 def __init__(self, x): # 结点的两个属性 14 self.data = x 15 self.next = None # next默认值一般为None 16 17 18 class Solution(object): 19 def __init__(self): 20 self.length = 0 21 self.head = None 22 23 def addTwoNumbers(self, l1, l2): 24 """ 25 :type l1: ListNode 26 :type l2: ListNode 27 :rtype: ListNode 28 """ 29 # 链表下一个元素是否需要加1,或者链表最后是否需要增加结点 30 carry = 0 31 res = pre = ListNode(0) # 创建res和pre两个结点,具有共同的地址 32 # 判断l1、l2、node是否有值 33 while l1 or l2 or carry: 34 if l1: 35 carry += l1.data 36 l1 = l1.next 37 if l2: 38 carry += l2.data 39 l2 = l2.next 40 carry, data = divmod(carry, 10) # 现在carry具有同结点的和,需要判断sum是否大于10 41 # pre.next = pre = ListNode(data) 42 pre.next = ListNode(data) # pre已经存在,创建pre.next; 43 pre = pre.next # 进行迭代更新 44 return res.next 45 46 47 if __name__ == '__main__': 48 # 定义l1 49 l1 = ListNode(2) 50 l1.next = l11 = ListNode(4) # 先创建l11:l11 = ListNode(4) 和 #将l11的地址赋给l1.next:l1.next = l11 51 l11.next = l12 = ListNode(3) 52 # 定义l2 53 l2 = ListNode(5) 54 l2.next = l21 = ListNode(6) 55 l21.next = l22 = ListNode(4) 56 # 创建Solution的对象 57 addTwoNumbersExp = Solution() 58 res = addTwoNumbersExp.addTwoNumbers(l1, l2) 59 while res: 60 print(res.data) 61 res = res.next