【发布时间】:2016-06-11 23:37:04
【问题描述】:
我认为我遗漏了一个非常明显的观点,但在我的 Java 教科书中找不到。
我了解对于链表而言,节点存储在内存中不一定必须是连续的。这是否也意味着链表不可索引?如果是这样,那么在链表中查找项目的唯一方法就是遍历链表,对吧,而您可以通过索引从数组中get?
【问题讨论】:
-
链表访问是(sequential, so) O(n);数组访问是(随机的,所以)O(1)。这篇文章中有很多很好的信息:en.wikipedia.org/wiki/Linked_list
-
谢谢@BrianSnow。我仍然不明白为什么链表不可索引。从我收集到的信息来看,链表是否不包含对它所包含的所有项目的引用——只有头部和/或尾部?因此不允许通过索引访问?
-
假设您有一个名为 L 的链表。可能在 L 上公开的唯一操作将是
head(),它返回链表的头部:Node<T> head = L.head()。列表的头部只是一个简单的节点,它也只暴露了一个操作,称为next(),它返回列表中的下一个节点。您现在可以通过执行Node<T> node = head.next()来遍历列表,直到您到达列表末尾和node.next() == null。所以你是对的:链表不会直接引用它的所有元素——它只保留对其头部的引用。
标签: java