在 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
引用的Node
s 组成,即也被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 中向后移动的语法?的主要内容,如果未能解决你的问题,请参考以下文章