LeetCode两数相加Python解法提交报错:ListNode对象无reverse属性
两数相加提交报错解决方案
核心结论
代码本身存在逻辑问题,和LeetCode的IDE设置无关。
问题原因
- 本地测试时你定义的
l1、l2是Python内置的list类型,自带reverse()方法,也支持直接遍历,因此运行正常。 - LeetCode的
addTwoNumbers方法接收的入参是题目预定义的ListNode单链表实例,该类仅声明了val(当前节点存储的值)和next(指向后继节点的指针)两个属性,没有实现reverse方法,也不支持直接for循环迭代,因此调用l1.reverse()会直接触发属性不存在的报错。此外你代码最后返回的是列表类型,而题目要求返回值为ListNode类型,就算前面的报错修复,返回值类型不匹配也无法通过用例。
适配修改方案
如果要沿用你现有的「转整数相加再转链表」的思路,只需要补充两个工具方法,分别实现ListNode到列表、列表到ListNode的转换即可,修改后可通过的代码如下:
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution(object): # 工具方法:ListNode转普通列表 def listnode_to_list(self, node): res = [] while node: res.append(node.val) node = node.next return res # 工具方法:普通列表转ListNode def list_to_listnode(self, lst): dummy = ListNode() cur = dummy for num in lst: cur.next = ListNode(num) cur = cur.next return dummy.next def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ # 先转成普通列表再执行你原来的逻辑 l1_list = self.listnode_to_list(l1) l2_list = self.listnode_to_list(l2) l1_list.reverse() l2_list.reverse() res1 = int("".join([str(x) for x in l1_list])) res2 = int("".join([str(x) for x in l2_list])) ans = res1 + res2 ans_list = [int(x) for x in str(ans)] ans_list.reverse() # 最后转成ListNode返回 return self.list_to_listnode(ans_list)
补充说明
也可以直接按单链表逐位相加的方式实现,不需要额外的类型转换,空间复杂度更低,上述修改是在你原有逻辑基础上改动最小的方案。
内容的提问来源于stack exchange,提问作者FKWafc
相关产品推荐
相关产品推荐

