为什么到双链表前面的递归函数不起作用?

2024-06-28 22:04:06 发布

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

我是一个刚完成edX导论课程MIT 6.00.1x的新手;以下是该课程期末考试中的一个问题(现已结束,因此我可以寻求帮助)。让

def class DLLNode(object):
    def __init__(self, name):
        self.cargo = cargo
        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 getCargo(self):           return self.cargo

用于创建双链接列表。假设node是出现在双链接列表中的DLLNode类的一个实例。然后node.getBefore()返回列表中node的直接前导项,但如果{}位于列表的前面并且没有前导,则返回{}。在

我写了一个递归函数

^{pr2}$

我希望返回双链接列表中的第一个节点,将列表中的一个已知节点nodeInList作为参数。在

我的问题是:firstInList到达正确的第一个节点,这可以从它打印第一个节点的货物而不考虑使用的具体nodeInList来证明。但是当nodeInList不是链表中的第一个节点时,firstInList(node)的返回值就会变成None,而不是期望的第一个节点。这个结论是基于以下结论的:例如,如果列表的第一个节点node1具有cargo1,后面是{},其中cargo是{},那么{}的计算结果是True,但是{}的计算结果是{}。调用firstInList(node2).getCargo()将返回错误消息

Attribute Error: 'NoneType' object has no attribute 'getCargo'

另一个数据是firstInList(node1) == node1的计算结果是True;这至少和我预期的一样。在

这表明找到的firstnode没有以我想象的方式返回递归调用链。有人能解释一下为什么吗?

(请不要建议我使用迭代而不是递归。我知道怎么做。我试图理解python2.7对于编写的代码的行为。)


Tags: selfnonenode列表return节点链接def
1条回答
网友
1楼 · 发布于 2024-06-28 22:04:06

好吧,看起来你没有return递归的结果,所以函数在所有情况下都会返回默认的未初始化值,但degrade函数除外。在

最后一行应该是:

return firstInList(nodeInList.getBefore())

相关问题 更多 >