【问题标题】:Is there any doubly linked list implementation in Java?Java中是否有任何双向链表实现?
【发布时间】:2015-09-30 16:36:38
【问题描述】:

我看到LinkedList 的JDK 实现内部包含Node 内部类,其中包含下一个和上一个的地址。

所以我怀疑 LinkedList 在 java 中不是双向链表。如果不是,为什么?

以及如何实现我们自己的双向链表?

【问题讨论】:

标签: java linked-list


【解决方案1】:

是的,LinkedList 是一个双向链表,正如 Javadoc 提到的那样:

List 和 Deque 接口的

双向链表实现。实现所有可选的列表操作,并允许所有元素(包括 null)。

双向链表的所有操作都按预期执行。索引到列表中的操作将从开头或结尾遍历列表,以更接近指定索引的为准。

【讨论】:

  • linkedList.listIterator().previous().
  • @pvg ListIterator<E> listIterator(int index); 正是这样做的。当然它必须遍历链表(从头到尾)才能到达所需的节点。
  • @AvinashJethy ListIterator 允许双向迭代。 listIterator(i).previous() 就是你要找的。​​span>
  • @pvg A node interface gives you constant time access to prev/next - 你仍然需要遍历一个链表(从头到尾)直到你到达那个节点。这正是listIterator(i) 所做的事情(get(i) 也做了同样多的工作)。获取 ListIterator 后,previousnext 会在恒定时间内运行。
  • @AvinashJethy list.listIterator(i) 让您可以访问第 i 个元素之前和之后的元素以及它们的索引。目前尚不清楚您还需要什么未涵盖的内容。即使您有权访问内部 Node/Entry 类,您也必须从列表的第一个或最后一个 Node 进行迭代才能到达第 i 个 Node。这就是 ListIterator 为您所做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 2011-06-03
  • 1970-01-01
  • 2012-05-10
  • 2012-10-30
  • 2018-03-14
相关资源
最近更新 更多