在java LinkedLists中,我们有迭代器。
我可以使用ListIterator然后进行线性搜索以找到Iterator指向的最后一个元素。但这需要O(n)时间。如何在O(1)时间内找到指向最后一个元素的迭代器?
答案 0 :(得分:5)
java.util.LinkedList
实际上是双重链接变体。它可以从两端进行遍历。因此,获得第一个元素并获得最后一个元素同样快。
至少Sun的(Oracle的?)实现就是这种情况。
答案 1 :(得分:0)
我不确定这是否是O(1),但是如果你真的想要一个迭代器到最后一个元素(而不是只获取最后一个元素),你可以使用listIterator(index)方法,其中index是列表中您希望迭代器开始的位置。
答案 2 :(得分:0)
根据Linked List的定义,只有一个指向头部或第一个项目的指针,并且可能只是顺序访问每个其他节点!所以我恐怕答案是否定的!在O(1)时间内无法访问最后一个元素。您可以将链表内容放入数组或映射中,然后下一个访问可以是O(1)