链表元素求和函数异常:逆序存储数字的链表计算结果不符
问题分析与修正
你的代码出错的核心原因是Python中^是按位异或运算符,不是幂运算符号,这导致你计算10的counter次方的逻辑完全错误。
错误细节验证:
- 当只有值为5的节点时,
counter=0,10^0的结果是10(按位异或:10的二进制1010和0的0000异或后还是1010,即十进制10),所以5*10=50,和你得到的结果一致。 - 当有5和4两个节点时:
- 第一次循环:
counter=0,5*(10^0)=5*10=50 - 第二次循环:
counter=1,10^1的结果是11(二进制1010^0001=1011,十进制11),所以4*11=44 - 总和
50+44=94(你提到的91可能是笔误,但核心错误是运算符使用错误)
- 第一次循环:
修正代码:
把10^counter替换为Python中表示幂运算的10**counter(或者pow(10, counter))即可:
class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next head = ListNode(5) head.next = ListNode(4) def sum_number(l1): n_sum = 0 counter = 0 while l1: n_sum += l1.val * (10**counter) # 用**代替^实现幂运算 l1 = l1.next counter += 1 return n_sum print(sum_number(head)) # 输出45,对应逆序链表表示的数字45
验证结果:
- 当只有值为5的节点时,
sum_number返回5(5*10**0=5*1=5),符合预期。 - 当有5和4两个节点时,返回45(
5*1 +4*10=45),正确对应逆序链表代表的数字。
内容的提问来源于stack exchange,提问作者Lúcio
相关产品推荐
相关产品推荐

