You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Leetcode876链表中间节点问题:AttributeError及输出异常求助

解决Leetcode 876「链表的中间节点」问题的修复方案

核心问题分析

  1. 参数类型不匹配:直接将普通列表[1,2,3,4,5]传入middleNode方法,但该方法要求的参数是ListNode类型的链表头节点,列表没有next属性,因此触发AttributeError。
  2. 链表构造错误:用ListNode(head)构造链表的方式完全错误,ListNode的初始化方法接收单个节点值,而非整个列表,这样会把整个列表赋值给第一个节点的val,无法生成正确的链式结构。
  3. 冗余继承: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:05:18