我在Python中找到了一个Python链接列表的实现,但它没有任何解释或注释。
我理解链接列表的基本概念,但是我不理解的代码中有一个关键部分:
class Node:
def __init__(self, data):
self.data = data
self.next = None
def get_data(self):
return self.data
def get_next(self):
return self.next
def set_data(self, data):
self.data = data
def set_next(self, next):
self.next = next
class LinkedList:
def __init__(self):
self.head = None
def is_empty(self):
return self.head == None
def add(self, item):
temp = Node(item)
temp.set_next(self.head)
self.head = temp
def size(self):
current = self.head
count = 0
while current != None:
count += 1
current = current.get_next()
return count
def search(self, item):
current = self.head
while current != None:
if current.get_data() == item:
return True
else:
current = current.get_next()
return False
def remove(self, item):
current = self.head
previous = None
found = False
while not found:
if current.get_data() == item:
found = True
else:
previous = current
current = current.get_next()
if previous == None:
self.head = current.get_next()
else:
previous.set_next(current.get_next())
我不明白size
类中的search
,remove
和LinkedList
方法如何能够通过Node
类调用函数current
变量在设置为self.head
之后,似乎包含在LinkedList
类的范围内。
是因为add
方法设置self.head = temp
,其中temp
是Node对象吗?
如果可能,有人可以解释一下这是如何工作的吗?
答案 0 :(得分:0)
你说过:
我不知道LinkedList类中的大小,搜索和删除方法如何能够通过当前变量调用Node类中的函数,然后将其设置为self.head,这似乎包含在LinkedList类的范围。
您可以在代码中看到,初始化LinkedList会执行以下代码行:
self.head = None
由于head设置为none,因此size,search和remove方法不会在整个代码中运行。相反,它会在self.head == None时停止,这几乎是在开始时。
例如,让我们来看看尺寸方法。
def size(self):
current = self.head
count = 0
while current != None:
count += 1
current = current.get_next()
return count
在此函数中,current设置为self.head,除非您通过调用add()方法添加了任何节点,否则该值为null。稍后会详细介绍。
count设置为0.然后启动while循环,仅在当前不是None时运行。但由于当前设置为self.head为None,因此while循环不会运行,函数将返回0的计数。这是一个正确的实现,因为链表中当前没有节点。
现在了解如何添加节点。
添加方法:
def add(self, item):
temp = Node(item)
temp.set_next(self.head)
self.head = temp
这里,add方法接收一个项目。该项是某种对象,无论是字符串,整数,浮点数等。现在创建变量temp并将其设置为新节点,最后使用Node类中的某些内容。然后,将temp的下一个节点设置为head并将head设置为temp。这样做的是链表不断更新头部。
像这样:
(头) NODE1
添加更多节点
(头) NODE2 NODE1
等等......
快乐的编码!