为什么我们要为链表中的head节点创建一个不同的类



我是数据结构的新手,刚开始使用链表。我理解整个代码,但无法理解原因CCD_ 1是成为类Node的对象的类Linkedlist的属性。在后面的例子中,我们为什么要做这个作业llist.head = node(1)

class Node: 

def __init__(self, data): 
self.data = data
self.next = None

class LinkedList: 

def __init__(self): 
self.head = None
if __name__=='__main__': 

llist = LinkedList() 

llist.head = Node(1) 
second = Node(2) 
third = Node(3) 

llist.head.next = second
second.next = third 

您有一个表示节点的类和一个表示列表的类。

但是您也可以考虑每个节点代表(子)列表的起点。因此,如果更适合你,你可以取消代表列表的类:

class Node:
def __init__(self, data):
self.data = data
self.next = None
if __name__ == '__main__':
head = Node(1)
second = Node(2)
third = Node(3)
head.next = second
second.next = third

将其他对象作为类的属性是非常常见的
(特别是在Python中,将类的所有属性都视为对象是有意义的。数字可能是Integer对象,名称可能是String对象…LinkedList有Node对象。这里唯一的区别是您自己创建了类,而不是使用内置类!)

面向对象的方法中,为Node和LinkedList使用单独的类非常有意义。它们是非常不同的东西,有某种相关性,比如说,类似于公交线路和公交车站。公交线路有第一站、第二站和第三站等。这些站本身有上一站和下一站。

顺便说一句:LinkedList的美妙之处在于,您不必为每个节点命名。您只需要知道它从哪里开始——从那里开始,您只需跟随单个节点的next元素就可以一直浏览列表。

我也有同样的问题,但不太相信。因此,我做了一些研究,找到了这个问题的确切答案,为什么我们也要为Node和head创建一个不同的类,即为什么我们在链表实现中使用两个类?这些都是我的问题,他们都有一个单一的答案:

假设我们只使用Node类,即头节点没有单独的类。我们总是通过引用头节点来访问链表。如果多个对象需要引用"链表",然后"链表"的头部发生更改,该怎么办?一些物体可能仍然指向旧的头部。我们该怎么办。这个问题的解决方案是引入包含头节点的LinkedList类,即保存头节点的初始值。因此,我们应该实现一个LinkedList类,该类封装类Node。

相关内容

最新更新