有效地在双向链接列表中搜索具有指针约束的值?

杰纳迪

我得到了这个问题来解决:

假设您获得了一个双向链接列表和一个指向该列表中某些元素的指针。假设您要在列表中搜索某个值v,您知道该值存在于某处。除p外不使用任何指针,设计一个用于查找v的Θ(m)时间算法,其中m是p与包含v的节点之间的距离。请勿修改输入列表。

有谁知道如何解决这个问题?我可以想到的唯一方法是破坏性地修改列表。

伯恩哈德·巴克(Bernhard Barker)

我认为templatetypedef的答案正确,但是基于问题的原始措辞,想到了以下解决方案,该解决方案指出该列表不能被“销毁”或“改组”,这可能意味着如果您愿意,可以对其进行修改可以再次将其更改-即使事实并非如此,我仍然认为这是一种有趣的方法。


可以很容易地用2个指针解决,对吗?一个向前走,另一个向后走,同时移动两个,直到找到您要的值。

现在,这一切都很好,除了只允许我们有1个指针。

如果考虑双重链接列表,我们知道前一个节点的next指针只是指向当前元素的指针,因此,如果我们要丢失它,可以再次设置它。

因此,我们可以将其p.prev.next用作免费存储空间(和p.prev.prev.next,并提供类似的参数)。

因此,我们只能使用向前p.prev.next移动的一个指针,然后将其存储回去,并在进行操作时适当地移动它。

一些Java风格的伪代码忽略了列表结尾检查,并且为了简单起见没有找到它(我认为它已经足够复杂了):

if p.data == v
  return v

p = p.next
p.prev.next = p.prev.prev

while not found
  if p == v || p.prev.next == v
    p.prev.next = p                   // restore p.prev.next
    return v
  p = p.next
  p.prev.next = p.prev.prev.next.prev // set up p.prev.next from p.prev.prev.next
  p.prev.prev.next = p.prev           // restore p.prev.prev.next

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

python有效地比较列表列表

来自分类Dev

Java BST最有效地搜索最大值

来自分类Dev

有效地搜索“关闭点”

来自分类Dev

索引全文搜索查询以有效地扇出

来自分类Dev

不可搜索时有效地获取子集

来自分类Dev

如何有效地获取具有唯一值的索引列表?

来自分类Dev

通过跳过缺失值有效地遍历字典列表值Python 3

来自分类Dev

如何有效地搜索列表中的项目?

来自分类Dev

有效地初始化具有初始值的向量

来自分类Dev

最有效地根据组合框值评估列中的值列表

来自分类Dev

如何有效地搜索子文档

来自分类Dev

有效地从列表中删除重复项

来自分类Dev

有效地查找数据框中几乎具有相同值的行组

来自分类Dev

如何使用python中的列表有效地排序列表列表

来自分类Dev

如何有效地复制列表中的特定值

来自分类Dev

从具有名称列表的List <Files>有效地提取文件列表

来自分类Dev

有效地在二叉搜索树中搜索父母

来自分类Dev

如何在python中更有效地搜索大型列表?

来自分类Dev

Vim:您如何有效地搜索文本?

来自分类Dev

python有效地比较列表列表

来自分类Dev

如何有效地搜索JSON数组

来自分类Dev

neo4j:如何有效地搜索列表中的值?

来自分类Dev

有效地搜索JSON文件

来自分类Dev

如何在大代码目录中有效地搜索字符串列表

来自分类Dev

通过跳过缺失值来有效地遍历字典列表值Python 3

来自分类Dev

如何有效地搜索列表中的项目?

来自分类Dev

SAS如何有效地创建具有相应值的变量

来自分类Dev

在ListView UWP中有效地实现搜索

来自分类Dev

有效地将范围列表映射到文件中的值列表