我最近开始练习在Python中使用LinkedList,遇到了以下问题。两个代码看起来都在做同样的事情,但其中一个出现了错误,而另一个则没有。有人可以告诉我为什么会这样吗?:
ListNode
类定义为:
#Python Linked List
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
假设我们有这个链表:
node = ListNode{val: 2, next: ListNode{val: 4, next: ListNode{val: 3, next: None}}}
这可以正常运行并打印“2 4 3”:
while node:
print(node.val) # access the values of the node by node.val
node=node.next`
这给了我一个错误,说“NoneType”对象没有属性“val”,同时仍然打印“2”
node = node.next
print(node.val)
我希望看到代码 2 打印“2”,但不会给我错误。
请注意,代码 1 和代码 2 是独立运行的
node = ListNode{val: 2, next: ListNode{val: 4, next: ListNode{val: 3, next: None}}}
事实上,代码 2 确实打印 2,它只是打印 2 并带有
Nonetype
错误,这是我想避免的。
while 循环完成后,您位于链接列表中的最后一个
node
。
因此 node.next
将根据您的定义指向 None
:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
根据您的代码,您已将属性“val”的默认值设置为0,“next”设置为None。如果假设您已经创建了一个实例,则 None 将被分配给该实例的“next”属性。如果要访问“下一个”属性,请创建另一个实例并将其分配给前一个实例的“下一个”属性
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
node1 = ListNode()
node2 = ListNode()
node1.next = node2
print(node1.next)
尝试访问 val 属性或遍历 None 对象的 next 指针将导致 AttributeError 并导致代码失败。检查 None 有助于确保该函数处理所有可能的情况。
if node:
print(node.val)