python - python递归中的链表

标签 python recursion linked-list

我在 python 中有一个 LinkedList 的简单实现。如何在方法中使用递归?我知道递归是如何工作的,但我如何将 self 与递归一起使用。如果有人可以修复我的代码,那就太好了,但我对解释更感兴趣,因此我可以用不同的方法使用它。

链表代码:

class Node:
    def __init__(self, item, next):
        self.item = item
        self.next = next

class LinkedList:
    def __init__(self):
        self.head = None

    def add(self, item):
        self.head = Node(item, self.head)

    def remove(self):
        if self.is_empty():
            return None
        else:
            item = self.head.item
            self.head = self.head.next
            return item

    def is_empty(self):
        return self.head == None 

我的代码是:

def count(self, ptr=self.head):
    if ptr == None:
        return '0'
    else:
        return 1 + self.count(ptr.next)

它给我一个错误:

def count(self, ptr=self.head):
NameError: name 'self' is not defined

非常感谢任何帮助。

最佳答案

在 Python 中,默认参数是不是在运行时计算的表达式。这些是在评估 def 本身时评估的表达式。所以对于一个 class 通常是在第一次读取文件的时候。

结果,在那一刻,没有selfself 是一个参数。所以这仅在您调用函数时可用。

您可以通过使用例如 None 作为默认值并执行检查来解决该问题。但是这里我们不能使用None,因为你已经给它赋予了特殊的含义。然而,我们可以构建一个dummy 对象,并使用它:

<b>dummy = object()</b>

def count(self, ptr=<b>dummy</b>):
    <b>if ptr is dummy:
        ptr = self.head</b>
    if ptr == None:
        return '0'
    else:
        return 1 + self.count(ptr.next)

您的代码的另一个问题是您返回一个表示零的字符串。因为你不能简单地添加一个整数和一个字符串,这会出错。所以你应该返回一个整数:

dummy = object()

def count(self, ptr=dummy):
    if ptr is dummy:
        ptr = self.head
    if ptr == None:
        return <b>0</b>  # use an integer
    else:
        return 1 + self.count(ptr.next)

关于python - python递归中的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46814083/

相关文章:

c - 如何修改链表中的插入函数以适合所需的输出?

复杂度为O(1)的单链表删除一个元素的算法

java - 为什么我们需要一个临时变量来从链表中删除节点?

Python Tkinter GUI乱码打印格式

python - pyspark udf rlike条件是否错误

python - 如何计算元组列表中的重复项数?

c - C 中递归的阶乘 : why my code is running?

python - 如何从元组列表中找到频率最高的 3 个元素?

python - 我将如何迭代地编写这个递归函数?

recursion - 在递归枚举上使用附带移动值错误