#python
#питон
Вопрос:
Я изучаю Python и работаю над созданием односвязного класса list. Все конструкторы классов, функции добавления и отображения работают, но при попытке реализовать рекурсивную функцию удаления я обнаруживаю, что либо список вообще не изменяется, либо он полностью удаляется. Добавление операторов print в рекурсивную функцию, которые предназначены для печати значения узла, генерирует нетипичные ошибки атрибута, которые наводят меня на мысль, что у меня может возникнуть проблема с передаваемыми аргументами, поскольку объект, который я считаю узлом, по-видимому, нет. Я рассмотрел другие нетипичные вопросы, которые я нашел в SE, но либо они не пролили необходимого света, либо я просто неправильно их понял. Определения классов:
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? Однако те же результаты возникают, когда я вызываю рекурсивную функцию непосредственно из тестовой программы. Любой свет, который может быть пролит, был бы очень признателен!
Комментарии:
1. Код в вопросе должен демонстрировать хотя бы один сбой.
2. Я добавил некоторый тестовый код вокруг него самостоятельно. Я не знаю, совпадает ли это с вашим. Я тоже изменил отступ. Я получил «цель найдена», но тогда вы не предпринимаете никаких попыток изменить список вокруг точки удаления. Вы просто сбрасываете весь список и назначаете остаток после точки удаления в качестве нового заголовка — поэтому это все, что останется. Я оставлю это как упражнение по отладке для вас.
3. Для простоты я бы предложил использовать только ОДИН класс (
Node
в вашем случае). Это то, что я делал в прошлом. Если вам нужен какой-то код для этого, пожалуйста, дайте мне знать!4. Хм. Является ли передача по ссылке или передача по значению соответствующей концепцией в Python? У меня возникли небольшие проблемы с осмыслением того, как это должно работать без указателей, которых, как я понимаю, здесь нет?