【问题标题】:Java : Iterator pointing to the last element in a LinkedListJava:指向LinkedList中最后一个元素的迭代器
【发布时间】:2011-08-21 09:07:08
【问题描述】:

在 java LinkedLists 中,我们有迭代器。

我可以使用 ListIterator,然后进行线性搜索以找到 Iterator 指向的最后一个元素。但这需要 O(n) 时间。如何在 O(1) 时间内找到指向最后一个元素的迭代器?

【问题讨论】:

  • 如果你只是在寻找最后一个元素,这听起来像是基于迭代器请求,然后使用getLast()
  • 不,我想从最后一个元素开始迭代。
  • 所以你想要一个反向/descending iterator? As-in,从最后一个元素到第一个元素?

标签: java iterator linked-list


【解决方案1】:

java.util.LinkedList 实际上是双向链接的变体。它可以从两端遍历。因此,获取第一个元素和获取最后一个元素同样快。

至少 Sun 的(Oracle 的?)实现是这种情况。

【讨论】:

  • 但是,我怎样才能得到一个指向最后一个元素的迭代器呢?
【解决方案2】:

我不确定这是否是 O(1),但是如果你真的想要一个指向最后一个元素的迭代器(而不是仅仅获取最后一个元素),你可以使用 listIterator(index) 方法,其中 index 是您希望迭代器开始的列表中的位置。

【讨论】:

  • 我不知道它是否在 O(1) 时间内执行。但是非常感谢。
【解决方案3】:

根据链表的定义,只有一个指向头或第一项的指针,并且对每个其他节点的访问可能只是顺序的!所以恐怕答案是否定的!您无法在 O(1) 时间内访问最后一个元素。您可以将链表内容放入数组或映射中,然后下一次访问可能是 O(1)

【讨论】:

  • 如果你使用descendingIterator()你可以从最后一个元素开始遍历。无论如何,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2013-02-20
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
相关资源
最近更新 更多