Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 排序双链表_Python_Doubly Linked List_Sortedlist - Fatal编程技术网

Python 排序双链表

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:

我想用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:
            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
    ,然后您再次尝试执行相同的检查,这一次,您尝试访问
    对象的
    数据
    属性,该属性将导致
    错误
    。删除代码也存在类似的问题

  • 其次,在add函数中,您只处理大于head的对象,如果以后添加的对象小于所有其他元素,您必须将其添加到self.head,但这种情况不会得到处理

  • 您当前没有处理一个大于列表中所有其他元素的元素的加法,在本例中,我认为您打算将self.tail设置为元素的最高值,但您也没有这样做

  • 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