有序双链Lis

2024-10-01 07:13:24 发布

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

好的,作业中的一个问题是,创建一个有序的双链表……这样每个字典中名称较小的对象都在另一个之前……就像字典中的名称一样……同样,同名的对象可以按任何顺序排列。。。在

要链接两个对象,我有setBefore()setAfter()方法。。。 我做了这么多…但还是不知道我哪里做错了…也许你们能给我一点指导。。。在

atMe是已经存在于双链接列表中的对象,newFrob是要插入的对象。。。在

def insert(atMe, newFrob):
    if newFrob.myName() < atMe.myName():
        if atMe.getBefore() == None:
            atMe.setBefore(newFrob)
            newFrob.setAfter(atMe)
        elif atMe.getBefore().myName()<newFrob.myName():
            atMe.getBefore().setAfter(newFrob)
            newFrob.setBefore(atMe.getBefore)
            atMe.setBefore(newFrob)
            newFrob.setAfter(atMe)
        else:
            insert(atMe.getBefore(),newFrob)

    elif newFrob.myName() > atMe.myName():
        if atMe.getAfter() == None:
            atMe.setAfter(newFrob)
            newFrob.setBefore(atMe)
        elif atMe.getAfter().myName()>newFrob.myName():
            atMe.getAfter().setBefore(newFrob)
            newFrob.setAfter(atMe.getAfter)
            atMe.setAfter(newFrob)
            newFrob.setBefore(atMe)
        else:
            insert(atMe.getAfter(),newFrob)

    elif newFrob.myName()==atMe.myName():
        if atMe.getAfter() != None:
            newFrob.setAfter(atMe.getAfter())
        newFrob.setBefore(atMe)
        if atMe.getAfter() != None:
            atMe.getAfter().setBefore(newFrob)
        atMe.setAfter(newFrob)

这是要使用的Frob类。。。在

^{pr2}$

其中Before和After是指向双链接列表中的左对象和右对象的链接。。。 类中的对象将被插入到双链接列表。。。在

示例:

a=Frob('foo')
b=Frob('bar')
c=Frob('frob')
d=Frob('code')

code                             output
insert(a,b)                   bar->foo
insert(a,c)                   bar->foo->frob
insert(b,d)                   bar->code->foo->frob

现在假设

code                             output
insert(b,Frob('code'))        bar->code->code->foo->frob

Tags: 对象iffoo链接barcodeinsertmyname
1条回答
网友
1楼 · 发布于 2024-10-01 07:13:24

问题就在这一行(当你往另一个方向移动时也是一个类似的问题):

newFrob.setBefore(atMe.getBefore)

您在atMe.getBefore后面缺少一组括号,因此您最终将绑定方法本身传递给newFrob.setBefore,而不是该方法将返回的值。这是一个很容易弄错的错误,所以我不会因为错过你的作业而感到难过。在

我通过尝试以下插入序列并检查这些值发现了错误(我总结了一些可以使用注释的插入):

^{pr2}$

最后提到的对象是b,这使我在代码中找到错误。在

相关问题 更多 >