已排序的双链接Lis

2024-04-26 00:20:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用add and 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

我试着运行它,但失败了。谁能告诉我原因吗?在


Tags: selfnoneaddnodeobjdatadefcurrent
2条回答
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 

查看add函数的逻辑,我可以看到一些问题-

  1. 一旦您添加了一个元素,即一旦您的self.headself.tail不再-None,那么您将执行while循环,以确定add_obj是否大于current.data。但是while循环写错了。假设我们在链表中只放了一个元素,我们试图添加一个大于current的数据,current将变成{},当前是None,然后再次尝试做同样的检查,这次您尝试访问None对象的data属性,结果是None。移除代码也存在类似的问题。

  2. 第二,在add函数中,只处理大于head的值,如果以后添加的对象小于所有其他元素,则必须将其添加到自身.头部,但那个案子没有处理。

  3. 你没有处理一个比列表中所有其他元素都大的元素,在这个例子中,我想你打算自尾元素的值最高,但您也不会这样做。

相关问题 更多 >