考虑以下类定义:
class Frob(object):
def __init__(self, name):
self.name = name
self.before = None
self.after = None
def setBefore(self, before):
self.before = before
def setAfter(self, after):
self.after = after
def getBefore(self):
return self.before
def getAfter(self):
return self.after
def myName(self):
return self.name
Frob是一个具有名称和两个连接或链接的对象:“之前”和“之后”链接,用于指向其他对象实例。
我们可以使用Frobs来形成一个称为双向链表的数据结构。在双向链表中,每个元素都具有如下属性:如果元素A具有到元素B的“之前”链接,则元素B具有到元素A的“后”链接。我们想要创建一个双向链接的Frob实例集合所有名称在特定Frob名称之前按字母顺序排列的Frobs在“之前”链接中按顺序排序,并且所有名称在特定Frob名称后按字母顺序排列的Frob将沿“after”链接排序。
请注意,如果插入的Frob与预先存在的Frob具有相同的名称,则两个名称都应插入到最终的数据结构中(两个相同的Frobs的确切顺序无关紧要)。
为插入函数提供定义,该函数将创建有序的双向链表。该函数在类Frob之外定义,并且有两个参数:一个Frob,它是当前双链表的一部分,另一个是Frob。新的Frob最初不会与其他Frobs有任何“之前”或“之后”链接。该函数应该改变列表以将新Frob放置在正确的位置,得到的双向链表具有适当的“之前”和“之后”链接。完成以下功能定义:
这是我尝试编码的,但这是错误的。请帮我完成代码。我被困在很长一段时间里。
def insert(atMe, newFrob):
"""
atMe: a Frob that is part of a doubly linked list
newFrob: a Frob with no links
This procedure appropriately inserts newFrob into the linked list that atMe is a part of.
"""
# My Code
nodes = []
if atMe in nodes:
nodes.append(newFrob)
nodes.sort()
else:
nodes.append(atMe)
nodes.append(newFrob)
nodes.sort()
答案 0 :(得分:1)
好的,既然你提供了至少一些超出作业文本的内容,我会尽量给出一些提示。
insert
函数必须做两件事:
Frob
的两个newFrob
个对象(或者它应该位于列表的一端)。这是通过比较对象的name
属性来完成的,因为赋值表明列表应按字母顺序排序。
常识表明你应该把某种循环(在链表上)放在一起来做这个,在那个循环中你应该检查一些涉及当前对象和新对象名称的条件。before
和after
属性以及其新邻居的属性来完成的。这可以使用setBefore
。P.S。您可以对我的答案发表评论,要求澄清,您也可以更新问题,详细说明您的进度(如果有的话)和遇到的问题。