Python 排序双链表
我想用add和remove函数创建一个类sort本身,下面是我的代码:Python 排序双链表,python,doubly-linked-list,sortedlist,Python,Doubly Linked List,Sortedlist,我想用add和remove函数创建一个类sort本身,下面是我的代码: 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:
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
我试图运行它,但失败了。有人能告诉我原因吗?查看您的
add
函数的逻辑,我发现了一些问题-
self.head
和self.tail
不再是-None
,您将执行while循环,以查找add\u obj
是否大于当前的.data。但是while循环写错了。假设我们在链表中只放置了1个元素,并且我们正在尝试添加一个大于当前值的数据,current
将变为当前值。下一个节点当前值为None
,然后您再次尝试执行相同的检查,这一次,您尝试访问对象的数据
属性,该属性将导致错误
。删除代码也存在类似的问题
def添加(self,add_obj):
newNode=DLLNode(添加对象)
电流=自身磁头
如果当前==无:
self.head=self.tail=newNode
其他:
如果添加_objcurrent.data:
当前=当前。下一个\u节点
如果是当前的!=无:
newNode.next_node=当前
newNode.prev_node=current.prev_node
当前.prev\u节点.下一个\u节点=新节点
当前.prev_节点=新节点
其他:
self.tail.next_node=newNode
newNode.prev_node=self.tail
self.tail=newNode
self.tail.next_节点=无
什么是故障?有错误吗?你得到了什么?在按下Post
按钮之前,您也应该尝试将这些内容放入问题中,这样阅读问题的人可以更容易地帮助您感谢帮助。现在我像这样修改add函数的代码,它能解决这些问题吗?
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