Python实现反向链表相加结果出现科学计数法问题求助
问题排查与修复:SumLists链表求和出现科学计数法输出
问题原因
- 浮点数除法导致carry变为小数:Python3中
/执行浮点除法,例如12/10得到1.0而非整数1。后续循环中,carry的小数会不断累积到digit中,导致插入链表的节点数据变为浮点数。 - 循环无法正常终止:由于浮点数精度问题,carry永远无法精确等于0(比如
0.91/10会得到0.091,继续除以10会得到更小的浮点数),循环会持续执行,不断插入极小的浮点数节点,最终输出大量科学计数法格式的数值。
修复方案
将求和函数中计算carry的浮点除法替换为整数除法(使用//运算符),确保carry始终为整数,循环能在carry为0时正常终止,同时保证所有插入的节点数据都是整数。
修复后的求和函数代码
def sumLists(self, ll2): curr1 = self.head curr2 = ll2.head sol = LinkedList() carry = 0 while curr1 is not None or curr2 is not None or carry != 0: digit = carry if curr1 is not None: digit += curr1.data curr1 = curr1.next if curr2 is not None: digit += curr2.data curr2 = curr2.next sol.insert(digit % 10) # 替换为整数除法,确保carry为整数 carry = digit // 10 return sol
验证结果
修复后,测试代码的输出会变为:
7 1 6 5 9 2 2 1 9
完全符合预期的2->1->9结果。
内容的提问来源于stack exchange,提问作者Steven Smith
相关产品推荐
相关产品推荐

