如何在链表中实现递归线性搜索?

时间:2019-03-03 00:32:47

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

我正在使用Python实现链表,但是递归线性搜索存在问题,这是部分代码:

def _linear_search_r(self, key):
    previous = None
    current = self._front
    index = 0
    if current == None:
        index = -1
    else:
        if current._data == key:
            return previous, current, index

如何在没有辅助功能的情况下实现提醒条件? (即current != None and current._data != key),我认为这是不可能的。

这是构造函数:

from copy import deepcopy

_ListNode类:

def __init__(self, value, next_):
    """
    -------------------------------------------------------
    Initializes a list node.
    Use: node = _ListNode(value, _next)
    -------------------------------------------------------
    Preconditions:
        _data - data value for node (?)
        _next - another list node (_ListNode)
    Postconditions:
        Initializes a list node that contains a copy of value
        and a link to the next node in the list.
    -------------------------------------------------------
    """
    self._data = deepcopy(value)
    self._next = next_
    return

班级列表:

def __init__(self):
    """
    -------------------------------------------------------
    Initializes an empty list.
    Use: l = List()
    -------------------------------------------------------
    Postconditions:
        Initializes an empty list.
    -------------------------------------------------------
    """
    self._front = None
    self._count = 0
    return

1 个答案:

答案 0 :(得分:0)

您没有提供足够的代码(尤其是链表实现)来回答这个问题而没有猜测。我现在要做什么:

对于非递归线性搜索,我猜想它可以在List类中完成,就像这样:

class List:

    # ...

    def _linear_search(self, key):

        current = self._front

        index = 0

        while current is not None:

            if current._data == key:
                return index

            current = current._next

            index += 1

self._front包含Node类的实例。

最初,对于递归版本,我猜测您有一个List类,而该类又使用了Node类。我们需要在List类中实现存根,而在Node类中实现大部分实现:

class Node:

# ...

    def _linear_search_r(self, key, index=0):

        if self._data == key:
            return index

        if self._next is None:
            return -1

        return (self._next)._linear_search_r(key, index + 1)

class List:

# ...

    def _linear_search_r(self, key):

        return (self._front)._linear_search_r(key)

尽管添加到Node类的方法可以作为辅助函数存在于List类中。

如果没有单独的ListNode类,而是一个类定义了数据结构,并且在每个节点中都设置了_front以指向第一节点节点初始化,则递归方法可能类似于:

def _linear_search_r(self, key, index=0):
    if index == 0:
        self = self._front

    if self._data == key:
        return index

    if self._next is None:
        return -1

    return (self._next)._linear_search_r(key, index + 1)

index是一个可选参数,对此函数的初始顶级调用中未提供。

如果这些都不是您想要的解决方案,请提供定义链接列表数据结构的代码。