好的,作业中的一个问题是,创建一个有序的双链表……这样每个字典中名称较小的对象都在另一个之前……就像字典中的名称一样……同样,同名的对象可以按任何顺序排列。。。在
要链接两个对象,我有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
问题就在这一行(当你往另一个方向移动时也是一个类似的问题):
您在
atMe.getBefore
后面缺少一组括号,因此您最终将绑定方法本身传递给newFrob.setBefore
,而不是该方法将返回的值。这是一个很容易弄错的错误,所以我不会因为错过你的作业而感到难过。在我通过尝试以下插入序列并检查这些值发现了错误(我总结了一些可以使用注释的插入):
^{pr2}$最后提到的对象是
b
,这使我在代码中找到错误。在相关问题 更多 >
编程相关推荐