我正试着做一个循环的单链表。我想能够修改我的代码为一个单独喜欢的名单,但我有一些麻烦。
对于我的链接列表,我有:
class Link (object):
def __init__ (self, data, next = None):
self.data = data
self.next = next
class LinkedList(object):
def __init__(self):
self.first = None
def __str__(self):
a = "["
current = self.first
while current != None:
a += str(current.data) + ', '
current = current.next
a = a[:-2] + ']'
return a
def __iter__(self):
current = self.first
a = []
while current != None:
a += [current.data]
current = current.next
return iter(a)
def __len__ (self):
current = self.first
a = []
while current != None:
a += [current.data]
current = current.next
return len(a)
def InsertFirst(self, item):
NewLink = Link(item, self.first)
self.first = NewLink
def InsertLast(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
def Search(self, item):
count = 0
current = self.first
while current != None:
count += 1
if current.data == item:
return count
else:
pass
current = current.next
return -1
def Delete(self, item):
current = self.first
previous = self.first
if (current == None):
return None
while (current.data != item):
if (current.next == None):
return None
else:
previous = current
current = current.next
if (current == self.first):
self.first = self.first.next
else:
previous.next = current.next
return current
到目前为止,对于我的循环列表,我有:
class Link (object):
def __init__ (self, data, next = None):
self.data = data
self.next = next
class CircularList(object):
def __init__(self):
self.first = Link(None, None)
self.head = Link(None, self.first)
def __str__(self):
a = "["
current = self.first
while current != None:
a += str(current.data) + ', '
current = current.next
a = a[:-2] + ']'
return a
def InsertLast(self, item):
NewLink = Link(item)
current = self.first
if current == None:
self.first = NewLink
return
while current.next != None:
current = current.next
current.next = Link(item)
我的问题是如何将最后一个元素链接回第一个元素,这样我就可以横向移动了?
last.next=创建时的第一个?
可能不是有效代码。但既然你在创建时肯定是在列表的最后一部分,那么你也可以。
循环链表的要点是跳过所有“if next is not None”逻辑。开始时,头部指向自身,表示列表为空。不需要创建空的“first”-在开始时:
然后要在其他节点之后插入节点,只需执行以下操作:
要在列表开头插入,请执行以下操作:
Insert before需要迭代以查找“before”节点,因为该列表仅单独链接:
要在列表末尾插入,请执行以下操作:
要获取列表中的所有元素,请执行以下操作:
但循环列表的真正功能是使它具有双重链接,因此您可以在插入之前不进行迭代。
相关问题 更多 >
编程相关推荐