Python 3-在链表中使用递归



Python3-我是编码新手,发现递归很难。我正在制作一个链表类,该类使用递归方法来添加和删除列表中的项。现在,如果某个项目恰好是我列表中的第一个项目,我将无法删除它。我写了一些替代代码,如果我包含另一个参数(以前的(和另一个基本情况,它可以从列表中删除第一项,但后来我只能删除第一项并且花了太长时间试图找出原因,所以我完全取消了它。如果能给我一个提示,我将不胜感激!

此外,我已经意识到我有getter,并且没有正确使用它们。

class Node:
"""
Represents a node in a linked list
"""
def __init__(self, data):
self._data = data
self._next = None
def get_data(self):
"""getter method for data in Node class"""
return self._data
def get_next(self):
"""getter method for next in Node class"""
return self._next
class LinkedList:
"""
A linked list implementation of the List ADT
"""
def __init__(self):
self._head = None
def get_head(self):
"""getter function for head of list"""
return self._head
def add(self, val):
""" Adds a node containing val to the linked list - helper function"""
self._head = self.recursive_add(self._head, val)
def recursive_add(self, node1, val):
""" Adds a node containing val to the linked list """
if node1 is None:
return Node(val)
else:
node1._next = self.recursive_add(node1._next, val)
return node1
def remove(self, val):
"""removed the node containing val from the linked list - helper function"""
self.recursive_remove(self._head, val)
def recursive_remove(self, node1, val):
"""
Removes the node containing val from the linked list
"""
if node1 is None:
return node1
elif node1._data == val:
return node1._next
else:
node1._next = self.recursive_remove(node1._next, val)
return node1
def main():
my_list = LinkedList()
my_list.add(13)
my_list.add(9)
my_list.add(5)
my_list.remove(9)


if __name__ == '__main__':
main()
def remove(self, val):
"""removed the node containing val from the linked list - helper function"""
if self._head and self._head._data == val:
self._head = self._head._next
return
self.recursive_remove(self._head, val)

如果是在一开始,就需要换个头。

remove中,您调用recursive_remove,但忽略其返回值。您应该将其用作(可能不同的(_head引用,必须像在递归方法本身中一样完成,其中有:

node1._next = self.recursive_remove(node1._next, val)
#       ^                                   │
#       └───────────────────────────────────┘

注意node1._next是如何作为参数传递的,方法的返回值是node1._next最终应该使用的(可能不同的(引用。相同的模式应应用于remove:中的初始调用

def remove(self, val):
self._head = self.recursive_remove(self._head, val)
#          ^                                  │
#          └──────────────────────────────────┘

注意:add中也使用了相同的模式,但你做得正确。

相关内容

  • 没有找到相关文章

最新更新