【发布时间】:2015-06-16 17:56:10
【问题描述】:
首先,我对单链表的基本理解是每个节点只指向下一个后续节点,所以我的问题可能源于我对此类列表的定义不正确。
鉴于列表设置,到达节点 n 将需要遍历它之前的 n-1 个节点,因此搜索和访问将是 O(n)。现在,显然节点插入和删除需要 O(1),但除非他们谈论第一个项目插入,否则实际上在节点 n 之间插入项目将是 O(n) + O(1) 和 n+1.
现在,索引列表也会有 O(n) 复杂度,但显然构建这样的索引是不受欢迎的,我不明白为什么。难道我们不能建立一个单链表索引,这将允许我们真正的 O(1) 插入和删除,而不必在列表上执行 O(n) 迭代以到达我们的特定节点?它甚至不需要是所有节点的索引,我们可以让它指向子索引,即对于 1000 个项目的列表,第一个索引将指向 1-100、101-200 等之间项目的 10 个不同索引. 然后这些索引可能指向更小的索引,即 10。这种方式到达节点 543 可能只需要 3+(索引遍历)迭代,而不是像典型的单链表那样需要 543 次。
我想,我要问的是为什么通常应该避免这种索引?
【问题讨论】:
标签: java algorithm list time-complexity