【问题标题】:'NoneType' object has no attribute 'val' in Python Linked List\'NoneType\' 对象在 Python 链表中没有属性 \'val\'
【发布时间】:2022-11-26 12:21:45
【问题描述】:

最近开始练习在Python中使用LinkedList,遇到了下面的问题。两个代码似乎都在做同样的事情,但是 1 得到了错误,而另一个没有。有人可以告诉我为什么会这样吗?:

`#Python Linked List
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

Assume we have linkedlist node = ListNode{val: 2, next: ListNode{val: 4, next: ListNode{val: 3, next: None}}}

#Code 1: (This can run fine)
while node:
    print(node.val) # access the values of the node by node.val
    node=node.next`

#Code 2: (This gives me an error saying 'NoneType' object has no attribute 'val')
node = node.next
print(node.val)

我希望看到代码 2 没有给我错误,但即使有错误,代码 2 仍然可以打印正确的值。

【问题讨论】:

  • 这是因为您已将属性“next”的默认值设置为 None。
  • 目前尚不清楚这些是否真的一个接一个地运行,或者您是否通常独立运行它们但只是将它们粘贴在一起以解决问题。
  • 您希望代码 2 打印的“正确值”具体是什么?
  • 是的,对此感到抱歉。假设已经定义了节点,我添加了一些定义节点值的行。

标签: python linked-list


【解决方案1】:

在你的 while 循环完成后,你位于链接列表中的最后一个node。 所以node.next 将根据您的定义指向None

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

【讨论】:

    【解决方案2】:

    根据您的代码,您已将属性“val”的默认值设置为 0,将“next”设置为 None。如果假设您已经创建了一个实例,则 None 将分配给该实例的“下一个”属性。如果您想访问“下一个”属性,请创建另一个实例并将其分配给前一个实例的“下一个”属性实例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-19
      • 2019-10-03
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多