在 LinkedList 中向后移动的语法?

Posted

技术标签:

【中文标题】在 LinkedList 中向后移动的语法?【英文标题】:Syntax to move backwards in LinkedList? 【发布时间】:2014-09-06 14:30:43 【问题描述】:

我知道 LinkedLists 是以双向链接的方式实现的,所以每个节点都有一个 next 和一个 previous 指针。但是,我找不到用于访问先前节点的语法? 我查看了java api,并且有一种方法可以向后迭代链表。 对我来说,这意味着有一种简单的方法可以访问以前的节点 P:。

我正在尝试设计一个实验来证明 LinkedLists 不仅仅是一个单链表,但我想不出如何在不向后移动链表的情况下这样做。

如果可能,请向我解释如何向后移动,非常感谢。

【问题讨论】:

我不明白你的问题。首先你说你通过查看javadoc找到了一种向后移动的方法,然后你问如何向后移动。那么,您的具体问题是什么? 我认为由于降序迭代器可以向后移动。但我不知道如何在 junit 测试中使用相同的功能。例如,如果有一个 1-> 2-> 3 的列表,我想知道如何从 2 中调用前一个节点。 查看源代码(Java 目录中应该有一个src.zip):LinkedList 由具有prev 引用的Nodes 组成,即也被ListIterator使用。 【参考方案1】:

您可以调用LinkedList.listIterator(),它将返回一个迭代器,您可以使用该迭代器进行双向(下一个/上一个)

【讨论】:

【参考方案2】:

LinkedList 有一个listIterator(int) 方法。所以你可以使用:

// Start at the end...
ListIterator<Foo> iterator = list.listIterator(list.size());
while (iterator.hasPrevious()) 
    Foo foo = iterator.previous();

这并不能证明它是一个双向链表——例如,它在单链表中的实现效率可能非常低——但这就是我要迭代的方式反向链表。

【讨论】:

非常感谢 :) 我如何证明它是一个双向链表?如果能够向后移动还不足以证明 @user1476390:通过查看 javadoc 或源代码。 @JBNizet,我知道文档说它是一个双向链表,但我的任务是以某种方式验证声明,我不知道该怎么做 @user1476390:好吧,您可以针对“列表大小”绘制“向后迭代所需的时间” - 对于双向链表,该图应该是线性的。

以上是关于在 LinkedList 中向后移动的语法?的主要内容,如果未能解决你的问题,请参考以下文章

为啥必须在 C 中向后读取指针声明? [关闭]

在 C 中向后读取文本文件

我如何在python中向后打印一个单词? [复制]

在 UIWebView 中向后/向前滑动手势?

如何在python中向后循环? [复制]

如何在 PyCharm 中向后调试?