Leetcode876链表中间节点问题:AttributeError及输出异常求助
解决Leetcode 876「链表的中间节点」问题的修复方案
核心问题分析
- 参数类型不匹配:直接将普通列表
[1,2,3,4,5]传入middleNode方法,但该方法要求的参数是ListNode类型的链表头节点,列表没有next属性,因此触发AttributeError。 - 链表构造错误:用
ListNode(head)构造链表的方式完全错误,ListNode的初始化方法接收单个节点值,而非整个列表,这样会把整个列表赋值给第一个节点的val,无法生成正确的链式结构。 - 冗余继承:
Solution类继承ListNode毫无必要,它仅需作为算法实现的容器类即可。
完整修复代码
# 876. Middle of a linked list # Definition for singly-linked list. class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next class Solution: def middleNode(self, head: ListNode) -> ListNode: fast = head slow = head while fast is not None and fast.next is not None: slow = slow.next fast = fast.next.next return slow # 辅助函数:将普通列表转换为链表结构 def list_to_linked_list(lst): dummy = ListNode() current = dummy for val in lst: current.next = ListNode(val) current = current.next return dummy.next # 辅助函数:将链表结构转换为普通列表 def linked_list_to_list(node): result = [] while node is not None: result.append(node.val) node = node.next return result # 测试流程 head = [1,2,3,4,5] # 先把普通列表转成符合要求的链表 linked_head = list_to_linked_list(head) s = Solution() middle_node = s.middleNode(linked_head) # 将返回的中间节点链表转成普通列表输出 print(linked_list_to_list(middle_node)) # 输出: [3,4,5]
关键修复说明
- 链表构造:通过
list_to_linked_list函数遍历列表元素,逐个生成ListNode节点并串联,确保传入middleNode的是合法的链表头。 - 结果转换:通过
linked_list_to_list函数遍历返回的中间节点,收集所有节点的值生成普通列表,得到你期望的输出格式。 - 代码规范优化:用
is not None替代!= None,这是Python中更规范的空值判断方式;移除Solution对ListNode的冗余继承。
内容的提问来源于stack exchange,提问作者Joshua Chung
相关产品推荐
相关产品推荐

