[英](Python) 'NoneType' object is not callable (Linked List implementation)
[英]Python Linked List Implementation and Object Modeling
我正在尝试在 Python 上实现单链表,下面的代码工作正常,但我不明白如何:
class Node(object):
def __init__(self, data=None, ):
self.value = data
self.next = None
class LinkedList1(object):
def __init__(self, data=None):
self.head = Node(data)
self.tail = self.head
self.length = 1
def append(self, data):
self.tail.next = Node(data)
self.tail = self.tail.next
self.length += 1
return self
def show_list(self):
head_copy = self.head
while head_copy is not None:
print(head_copy.value)
head_copy = head_copy.next
当我们测试它时:
linkin = LinkedList1(10)
linkin.append(20)
linkin.append(30)
linkin.append(40)
linkin.show_list()
output:
10
20
30
40
我不明白的是append function。 我知道self.tail
引用self.head
但是sefl.tail.next
如何将新Node(data)
添加到最后一个下一个,在我的逻辑中没有循环它应该添加到第一个下一个。
另外,如果我们这样编写 function:
def append(self, data):
self.head.next = Node(data)
self.tail = self.head.next
self.length += 1
return self
即使self.tail
引用self.head
这也不起作用。
我知道我在这里遗漏了一些东西。 你能帮我理解吗?
谢谢你。
self.tail
仅在有单个节点时设置为self.head
。 tail 始终更改为指向 LAST 节点,这与添加第二个节点之前的头节点相同。
每次调用 append 时,tail 都会更改为指向刚刚添加的节点。
append 到第一个节点没有多大意义,是吗? 这将摆脱列表中的 rest。
让我们逐行来看:
def append(self, data):
self.tail.next = Node(data)
在执行此操作之前, self.tail.next
为None
,表示列表到此结束。 现在我们已经将它设置为一个新节点,这个新节点有一个“下一个”值,即无。
self.tail = self.tail.next
由于 self.tail 需要指向列表中的最后一项,我们需要对其进行更改。 因此,上面的行将其更改为指向新的最后一项。
self.length += 1
return self
这些只是跟踪长度和返回。 只要正确完成,您就不需要遍历列表来了解其中有多少节点。
如果引用 class 节点,它有两个对象:值和下一个节点。
在链表实现中,它的实现方式是同时存储尾节点信息。 在 append function 中, self.tail.next = Node(data)
基本上在尾节点之后添加了一个新节点, self.tail = self.tail.next
将链表的尾节点重新分配给新创建的节点(现在是列表的最后一个节点)
例如,让我们看下面的代码:
linkin = LinkedList1(10)
linkin.append(20)
linkin.append(30)
linkin.append(40)
linkin.show_list()
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.