使用循环链表插入功能

时间:2015-04-05 22:51:29

标签: python circular-list

这是我的代码,每次调用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    

1 个答案:

答案 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