【发布时间】:2018-02-19 22:43:57
【问题描述】:
我在网上找到了一个用 Python 实现的链表,但它没有任何解释或 cmets。
我了解链表的基本概念,但代码中有一个关键部分我不明白:
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())
我不明白LinkedList 类中的size、search 和remove 方法在设置为self.head,似乎包含在LinkedList 类的范围内。
是不是因为add方法设置了self.head = temp,其中temp是一个Node对象?
如果可能,有人能解释一下这是如何工作的吗?
【问题讨论】:
-
是的。
current设置为self.head,这是一个Node对象(随后,设置为 otherNode对象),它具有这些方法。如果您使用current = my_list; current.append(something),它的工作方式与使用list对象方法完全相同 -
基本上,您在
LinkedList中存储对第一个Node 对象的引用,然后您可以从那里访问其方法,从而实现从Node 到Node 的导航过程。
标签: python python-3.x oop linked-list