题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
1 2 3 输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.
示例 2:
1 2 输入:l1 = [0], l2 = [0] 输出:[0]
示例 3:
1 2 输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] 输出:[8,9,9,9,0,0,0,1]
提示:
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零
Python题解 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 class Solution (object ): def addTwoNumbers (self, l1, l2 ): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ head = now = ListNode(0 ) sumNum = 0 while l1 or l2 or sumNum//10 : l1 = l1 if l1 else ListNode(0 ) l2 = l2 if l2 else ListNode(0 ) sumNum = l1.val + l2.val + sumNum//10 now.val = sumNum % 10 l1 = l1.next l2 = l2.next if l1 or l2 or sumNum//10 : now.next = ListNode(0 ) now = now.next return head
这边我之前犯了一个错误(代码如下),head和ll一开始引用同一个对象,当ll被赋为指向对象的next时,而指向对象的next为None,此时若再给ll赋新的对象,原先ll指向的对象的next并不会指向ll指向的新的对象,这两个对象没有任何联系,感觉这个可以用内存来解释。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class ListNode (object ): def __init__ (self, val=0 , next =None ): self.val = val self.next = next head = ll = ListNode(0 ) for i in range (10 ): if ll is None : ll = ListNode(0 ) ll.val = i ll = ll.next while head: print(head.val) head = head.next
看到了一个用递归解题的大佬:
1 2 3 4 5 6 7 8 9 10 11 class Solution : def addTwoNumbers (self, l1: ListNode, l2: ListNode ) -> ListNode: val = l1.val + l2.val l1 = l1.next if l1.next else ListNode(0 ) l2 = l2.next if l2.next else ListNode(0 ) l1.val = l1.val + val//10 if l1.val or l1.next or l2.val or l2.next : next_node = self.addTwoNumbers(l1, l2) else : next_node = None return ListNode(val%10 ,next_node)
自己尝试用递归写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Solution (object ): def addTwoNumbers (self, l1, l2 ): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ l1 = l1 if l1 else ListNode(0 ) l2 = l2 if l2 else ListNode(0 ) sumNum = l1.val + l2.val if l1.next or l2.next or sumNum//10 : if l1.next : l1.next .val += sumNum//10 elif l2.next : l2.next .val += sumNum//10 else : l1.next = ListNode(sumNum//10 ) nextNode = self.addTwoNumbers(l1.next , l2.next ) else : nextNode = None return ListNode(sumNum % 10 , nextNode)
小结
刚刚开始起步刷题,看了别人的代码才有思路
在python中//才是除以某数并向下取整