Python链表实现和对象建模
我正在尝试在Python上实现单链表,下面的代码工作得很好,但我不理解如何实现:Python链表实现和对象建模,python,data-structures,linked-list,Python,Data Structures,Linked List,我正在尝试在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)
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()
输出:
10
20
30
40
我不懂的是append函数。我知道self.tail
引用self.head
但是为什么sefl.tail.next
会将新的节点(数据)
添加到最后一个下一个,在我的逻辑中没有循环,它应该添加到第一个下一个
另外,如果我们这样写函数:
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
。尾部始终更改为指向最后一个节点,仅在添加第二个节点之前与头部节点相同
每次调用append时,tail都会更改为指向刚刚添加的节点
附加到第一个节点没有多大意义,是吗?这样就可以去掉名单上的其他部分
让我们一行一行地看:
def append(self, data):
self.tail.next = Node(data)
执行此操作之前,self.tail.next
为None
,表示列表到此结束。现在我们已经将其设置为一个新节点,该新节点的“next”值为None
self.tail = self.tail.next
因为self.tail需要指向列表中的最后一项,所以我们需要更改它。因此,上面的行将其更改为指向新的最后一项
self.length += 1
return self
这些只是跟踪长度和返回。只要操作正确,您就不需要遍历列表,只需知道其中有多少个节点。如果您指的是类节点,它有两个对象:value和next Node 在链表实现中,它以这样一种方式实现,即尾部节点信息也被存储。在append函数中,
self.tail.next=Node(data)
基本上在tail节点之后添加一个新节点,并且self.tail=self.tail.next
将链表的tail节点重新分配给新创建的节点(现在是列表的最后一个节点)
例如,让我们以以下代码为例:
linkin = LinkedList1(10)
linkin.append(20)
linkin.append(30)
linkin.append(40)
linkin.show_list()
希望这能有所帮助。很好的解释,你的意思是尾部引用可以保存所有的NEXT吗?它不能保存所有的NEXT。列表中的每个节点只保存一个“下一个”,即列表中下一个项目的下一个。尾部总是没有下一个节点,因为它是最后一个节点,后面什么也没有。