python 3中的链表实现



我还是一个编程初学者。我学习了Python的基础知识。现在我正在学习数据结构和算法。

我已经实现了一个链表。但是里面有一个问题。删除一个元素后,我的大小是0。我不知道这个错误是从哪里来的。

该代码在Python 3.7.4中进行了测试。

class Node(object):
def __init__(self, data):
self.data = data
self.nextNode = None

class LinkedList(object):
def __init__(self):
self.head = None
self.size = 0
# O(1)
def insertStart(self, data):  # insert data at beginnning of the list
self.size += 1
newNode = Node(data)
if not self.head:  # the head is None
self.head = newNode
else:  # the head is not None
newNode.nextNode = self.head
self.head = newNode
def remove(self,data):
if self.head is None:
return
self.size-=self.size
currentNode=self.head
previousNode=None
while currentNode.data != data:
previousNode=currentNode
currentNode=currentNode.nextNode
if previousNode is None:
self.head = currentNode.nextNode
else:
previousNode.nextNode=currentNode.nextNode
# O(1)
def size1(self):
return self.size
# O(N)
def size2(self):
actualNode = self.head
size = 0
while actualNode is not None:
size += 1
actualNode = actualNode.nextNode
return size
# O(N)
def insertEnd(self, data):
self.size += 1
newNode = Node(data)
actualNode = self.head
while actualNode.nextNode is not None:
actualNode = actualNode.nextNode
actualNode.nextNode = newNode
def traverseList(self):
actualNode = self.head
while actualNode is not None:
print("%d " % actualNode.data)
actualNode = actualNode.nextNode
a=LinkedList()
a.insertStart(3)
a.insertStart(4)
a.insertEnd(5)
#a.remove(3)
#a.remove(4)
a.remove(5)
print(a.traverseList())
print(a.size1())

self.size中减去self.size,显然会返回0。您只想删除1(self.size -= 1(

此外,您还有另一个错误。如果您试图删除一个不存在的节点,会发生什么?您的条件while currentNode.data != data:将引发一个NoneType错误,因为它最终会到达列表的末尾(None(而没有找到节点。

相关内容

  • 没有找到相关文章

最新更新