链表反转+元素相加02

题目:给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

输出:7 -> 0 -> 8

原因:342 + 465 = 807

思路:对两个链表的每个元素相加,如果小于10,则放在此位置上上,否则吧余数存储起来放在下一位上

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
class :
def addTwoNumbers(self, l1, l2):
"""利用carry,余数和商的关系
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
carry = 0
sum_list = node = ListNode(0)
while l1 or l2 or carry:
if l1:
l1_val = l1.val
else:
l1_val = 0
if l2:
l2_val = l2.val
else:
l2_val = 0
cur_node = ListNode((l1_val + l2_val + carry) % 10)
carry = (l1_val + l2_val + carry)//10
node.next = cur_node
node = node.next
l1 = l1.next if l1 else l1
l2 = l2.next if l2 else l2
return sum_list.next

例子:

1
2
3
4
5
# 首先创建2个链表,再调用函数
node1 = Solution1().creat_ll([3,4,5])
node2 = Solution1().creat_ll([4,5,6])
a = Solution1().addTwoNumbers1(l1 = node1,l2=node2)
print_ll(a)