class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
# 这个题目采用一个新的思路,先将链表中存储的数据进行反转,反转之后的数字就是整数,按照整数相加得到运算结果
# 然后将结果转化为字符串,再将字符串转化为链表输出,链表中数字是按照逆序存储的;
# 反转链表,然后整数相加;
# 另外一种解题思路是:按照加法操作,进位是否产生对结果有很大的影响
# 加法的结果还需要有一个链表来进行存储
curr = ListNode(0)
head = curr
jinwei = 0
while l1 != None or l2 != None:
if l1 == None:
x1 = 0
else:
x1 = l1.val
l1 = l1.next
if l2 == None:
x2 = 0
else:
x2 = l2.val
l2 = l2.next
# 得到了两个链表对应位置的值,现在要将对应的值进行相加,考虑进位,进位要么是0,要么是1,是对10取余数
sum = (x1+x2+jinwei) % 10 # 取模,返回除法的余数
jinwei = (x1 + x2 +jinwei) // 10 # 取整除运算,返回结果的整数部分
curr.next = ListNode(sum)
curr = curr.next
if jinwei == 1:
curr.next = ListNode(jinwei)
return head.next # 返回储存结果的头节点
错误记录:
- while 循环的判断提交,初次写成and了,只要两个链表中有一个在相应位置没有值,就要补零。
- 基本的python运算符不清楚,比如 % 表示取模,返回除法的余数, // 表示整除,返回除法结果的整数部分。下面来几个小例子:
print( 10//10)
print(10%10)
print('============')
print(6//10)
print(6%10)
print('============')
print(16//10)
print(16%10)
结果:
1
0
============
0
6
============
1
6