我最近开始在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}}}
代码1这可以正常运行,并将打印"2 4 3":
while node:
print(node.val) # access the values of the node by node.val
node=node.next`
代码2:这给了我一个错误,说'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
根据您的代码,您已经为属性" value "作为0,"next"没有。如果假定您已经创建了一个实例,则None将被分配给"next"。实例的属性。如果你想访问"下一步"属性,创建另一个实例,并将其分配给"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)