首页 > 解决方案 > Python链表-递归删除函数中的Nonetype错误

问题描述

我正在自学 Python 并通过构建单链表类来工作。类构造函数、add 和 display 函数都可以工作,但是当尝试实现递归删除函数时,我发现列表根本没有改变,或者它完全删除了自己。将打印语句添加到旨在打印节点值的递归函数会生成 Nonetype 属性错误,这表明我可能对传入的参数有问题,因为我认为是节点的对象显然是不是。我已经查看了我在 SE 上找到的其他 Nonetype 问题,但要么它们没有提供所需的信息,要么我只是误解了它们。类定义:

class Node:
    def __init__(self, value):
        self.data = value
        self.next_node = None
        
class List:
    def __init__(self):
        self.head = None

删除功能:

def remove(self, target):
     if(self.head == None):
          print("List is empty!")
          return None
     else:
          print(str(self.head.data))
          self.head = self.remove_target(self.head, target)
          return self.head
        
def remove_target(self, head, target):
     print("Target: " + str(target) + "Head: " + str(head.data)) #Nonetype errors occur here
     if(head == None):
          return head
     if(head.data == target):
          print("target found")
          head = head.next_node
          return head
     else:
          head.next_node = self.remove_target(head.next_node, target)
          return head

我以前的编程经验是在 c++ 中,我认为问题的一部分是用于隐藏 c++ 中数据成员的包装函数在 Python 中并不是真正的东西?但是,当我直接从测试程序调用递归函数时,会出现相同的结果。任何可以散发的光都将不胜感激!

标签: python

解决方案


推荐阅读