【问题标题】:Need help understanding Linked Lists with recursion (Python)需要帮助理解带有递归的链表(Python)
【发布时间】:2021-02-17 23:10:45
【问题描述】:

我正在处理一个处理链接列表和节点的项目,但我很难知道到目前为止什么不起作用。当我运行这段代码时,我得到的只是 19。任何我不理解的解释都将不胜感激。

    class Node:
"""
Represents a node in a linked list
"""
def __init__(self, data):
    self._data = data
    self._next = None

def get_data(self):
    return self._data

def set_data(self, newData):
    self._data = newData

def get_next(self):
    return self._next

def set_next(self, newNode):
    self._next = newNode

    class LinkedList:
"""
A linked list implementation of the List ADT
"""
def __init__(self):
    self._head = None

def get_head(self):
    """
    Returns head of node
    """
    return self._head

def rec_add(self, val, a_node):
    """
    A recursive method that adds a value to the linked list
    """

    # works for an empty list OR because it is recursive; will add the value when it reaches end of the list
    if a_node is None:
        self._head = Node(val)
        return self._head
    else:

        self._head.set_next(self.rec_add(val, a_node.get_next()))
        return self._head

def add(self, val):
    """
    Helper method for recursive add method
    """
    self._head = self.rec_add(val, self._head)

def rec_display(self, a_node):
    """recursive display method"""
    if a_node is None:
        return
    print(a_node.get_data(), end=" ")
    self.rec_display(a_node.get_next())

def display(self):
    """recursive display helper method"""
    self.rec_display(self.get_head())

这就是我正在测试的结果,刚刚返回 19:

    my_list = LinkedList()
    my_list.add(13)
    my_list.add(8)
    my_list.add(19)
    my_list.display()

【问题讨论】:

    标签: python-3.x linked-list nodes


    【解决方案1】:

    如果您打算将新节点添加到链表的末尾,那么您不希望每次添加新节点时都重置self._head

    def add(self, val):
        """
        Helper method for recursive add method
        """
        self._head = self.rec_add(val, self._head)
    

    通过这样做,您的代码会使下一个节点添加新的头节点,并且与前一个头节点的链接丢失。

    相反,您想分配一次头部,遍历链表直到到达末尾,然后将新节点添加到列表中的最后一个节点:

        def rec_add(self, val, a_node):
            # works for an empty list OR because it is recursive; will add the value when it reaches end of the list
            if a_node.get_next() is None:
                a_node.set_next(Node(val))
                return
            else:
                self.rec_add(val, a_node.get_next())
                return
    
        def add(self, val):
            if self._head is None:
                self._head = Node(val)
            else:
                self.rec_add(val, self._head)
    

    【讨论】:

    • 这太有道理了......上帝保佑你好心的先生/女士,你不知道我只是坐在那里看了多久,不知道为什么它不起作用!跨度>
    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 2016-11-15
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2020-05-03
    相关资源
    最近更新 更多