我想用添加和删除功能创建一个类排序,这是我的代码:
class SortedList(object):
def __init__(self):
self.head=None
self.tail=None
def add (self, add_obj):
newNode=DLLNode(add_obj)
current=self.head
if current==None:
self.head=self.tail=newNode
else:
while add_obj>current.data:
current=current.next_node
newNode.next_node=current
newNode.prev_node=current.prev_node
current.prev_node.next_node=newNode
current.prev_node=newNode
def remove (self, element):
current=self.head
while element != current.data:
current=current.next_node
current.next_node.prev_node=current.prev_node
current.prev_node.next_node=current.next_node
current=None
我试图运行但它失败了。谁能让我知道为什么?
答案 0 :(得分:0)
查看add
函数的逻辑,我可以看到一些问题 -
添加了一个元素后,即self.head
和self.tail
不再是None
- ,您正在执行一个while循环来查找{ {1}}大于add_obj
。但是while循环被错误地写了。让我们假设,我们只在链接列表中放入了1个元素,并且我们正在尝试添加大于current.data
的数据,current
将变为current
,这是当前{{ 1}},然后您再次尝试进行相同的检查,这次您尝试访问current.next_node
对象的None
属性,从而产生data
。您的删除代码也存在类似问题。
其次,在你的添加功能中,你只需要处理大于头,如果你以后添加一个小于所有其他元素的对象,你必须将它添加到self.head,但是这个案子没有处理。
你没有处理一个大于目前列表中所有其他元素的元素,在这种情况下,我认为你打算让self.tail成为最高值的元素,但是你没有做那个。
答案 1 :(得分:0)
def add (self, add_obj):
newNode=DLLNode(add_obj)
current=self.head
if current==None:
self.head=self.tail=newNode
else:
if add_obj<current.data:
self.head.prev_node=newNode
newNode.next_node=self.head
self.head=newNode
self.head.prev_node=None
else:
while add_obj>current.data:
current=current.next_node
if current != None:
newNode.next_node=current
newNode.prev_node=current.prev_node
current.prev_node.next_node=newNode
current.prev_node=newNode
else:
self.tail.next_node=newNode
newNode.prev_node=self.tail
self.tail=newNode
self.tail.next_node=None