我无法在python中实现循环链接列表的add函数。我有一个头指针应该是一个节点的引用,但每次我添加一些东西到列表,头总是无。这是我到目前为止的代码:
class CircleList():
__slots__ = ('head', 'size')
def __init__(self):
self.head = None
self.size = 0
def __str__(self):
result = "<"
node = self.head
count = self.size
while count != 0:
result = result + str(node.data)
if count != 1:
result = result + ", "
node = node.next
count -= 1
result = result + ">"
return result
def add(self, element):
head = self.head
print(head)
size = self.size
if head == None:
head = Node(element, None)
head.next = head
else:
cursor = head
while cursor.next != head:
cursor = cursor.next
temp = Node(element, head)
cursor.next = temp
size += 1
class Node():
__slots__ = ('data','next')
def __init__(self, data, next):
self.data = data
self.next = next
这是驱动程序:
stream = open('data.txt', 'r')
circlelist = CircleList()
for name in stream
circlelist.add(name)
print(circlelist)
答案 0 :(得分:1)
您只需将新节点分配到head
方法中的本地add()
变量,而不是实际的CircleList
实例成员。
您可能想要执行以下操作:
def add(self, element):
head = self.head
print(head)
size = self.size
if head is None:
self.head = head = Node(element, None) # Also set the instance member.
head.next = head
答案 1 :(得分:0)
易于修复!在你的add函数中,你将新的头部分配给head
变量 - 这个变量仅限于函数的范围,并且在它返回时会消失!
您必须设置self.head
的值,即当前实例的属性。
编辑:当您指定head = self.head
时,它们都指向同一个对象。但它们是单独的引用:它们是否碰巧引用相同的东西,改变一个不会改变另一个。