繁体   English   中英

递归深度超出-Python双链接列表

[英]Recursion Depth Exceeded - Python Doubly-Linked List

我正在创建一个实现为双链表的FIFO,但是对于为什么收到递归错误我一无所知。 我已经发布了我的代码和下面收到的错误。 任何帮助将非常感激!

"""DLList.py"""

class DLList(object):
    """A doubly-linked list

    attributes: nl = node list"""
    def __init__(self, nl=[]):
        self.nl = nl

    def __str__(self):
        return str(self.nl)

    def __len__(self):
        return len(self.nl)

    def append(self, node):
        if not isinstance(node, DLNode):
            raise TypeError
        try:
            node.pn = self.nl[-1]
            node.pn.nn = node
            self.nl.append(node)
        except:
            self.nl.append(node)

    def pop(self):
        rn = self.nl.pop(0)
        try:
            self.nl[0].pn = None
        except:
            pass
        return rn


class DLNode(object):
    """A node in a doubly-linked list.

    attributes: self.pn = previous node, self.data = data, self.nn = next node"""
    def __init__(self, data):
        self.pn = None
        self.data = data
        self.nn = None

    def __str__(self):
        return '[%s, %s, %s]' % (self.pn, self.data, self.nn)


a = DLNode(17)
b = DLNode(15)
c = DLNode(12)
d = DLNode(46)
e = DLNode(46)

ages = DLList()
ages.append(a)
ages.append(b)
ages.append(c)
ages.append(d)
ages.append(e)

print ages.pop()

我收到此错误:

File "C:\python\swampy-2.0\DLList.py", line 43, in __str__
    return '[%s, %s, %s]' % (self.pn, self.data, self.nn)
RuntimeError: maximum recursion depth exceeded

事实是,我从未打算使用递归,而且我不知道为什么进入了递归循环。 ages.pop()用于返回DLNode的实例。

当您打印节点时,您正在尝试打印self.pn和self.nn。 每个节点都是对另一个节点的引用,该节点在打印时将尝试无限制地打印其下一个节点和上一个节点,依此类推。 您要打印一个无限的节点镜像大厅。

您无法跟踪已经打印的内容,因此递归将永远继续。

也许我建议改用collections.deque 您可以在库中阅读其文档。 除非您将实现写成学术练习,否则deque可能更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM