这是我的代码,每次调用insert函数时,我都得到一个输出:<__main__.CircularList object at 0x10597fd68>
。
我试图使用insert函数实际创建循环链表,方法是使用for循环调用它。
class Link (object):
def __init__ (self, data, next = None):
self.data = data
self.next = next
class CircularList(object):
def __init__(self):
self.first = None
# Insert an element in the list
def insert ( self, item ):
newLink = Link (item)
current = self.first
if (current == None):
self.first = newLink
return
while (current.next != None):
current = current.next
current.next = newLink
newLink.next = self.first
答案 0 :(得分:2)
您的实施首先是错误的。如果你采用if
循环,你应该明确地将.next
值设置为自己,否则就不会成为一个圆圈:
if (current == None):
self.first = newLink
newLink.next = newLink
return
但接下来有一个重要的问题:通过迭代循环列表,你永远不会结束迭代,因为显然你会在你返回的那一刻再做一轮。
所以你首先需要决定你希望插入项目吗?作为第一项?或者是迭代时要到达的最后一项?
如果您想选择最后一个,首先必须将第一个项目存储在内存中:
first = current
(你当然也可以使用self.first
),但效率可能会低一些。)
接下来,您遍历项目列表,每次检查next
的{{1}}是否是第一个:在这种情况下,我们已经迭代了整个回合,所以:
current
现在,如果while (current.next != first):
current = current.next
指向current.next
,我们知道我们已经完成了一次完整的巡演。现在我们只需要执行一些指针簿记:
first
所以完整的代码是:
current.next = newLink
newLine.next = first