我正在使用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
答案 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
类中。
如果没有单独的List
和Node
类,而是一个类定义了数据结构,并且在每个节点中都设置了_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
是一个可选参数,对此函数的初始顶级调用中未提供。
如果这些都不是您想要的解决方案,请提供定义链接列表数据结构的代码。