我有一个n个节点的链表,我想删除第k个节点并在其中显示该元素。如果n的值相对较小并且问题的复杂性不是问题,那么这很容易。
问题是当我在链接列表中有n个节点,其中n> = 200000并且我想删除一个也是相对较大值的节点(比如k = 150000)。
此问题的正常解决方案是遍历整个链接列表并删除一个节点(解决方案的复杂性为O(n)),尽管它是直接且简单的解决方案需要更多时间。解决这个问题的其他方法可能是2个指针,但仍然不是最佳解决方案。
我正在寻找一种最佳的解决方案,并在最短的时间内提供结果。
希望我的问题很明确。需要一些帮助..
答案 0 :(得分:4)
使用docjure概念。
就像使用 Express Lanes或Highway Roads一样,以最快的速度到达所需的节点(通过选择最小的遍历长度)。
您需要创建多个图层,以便您可以毫不犹豫地 跳过某些节点 。
TC:与二进制搜索树O(log n)
相同的平均运行时间。
不需要对给定链表进行复杂的重组。
答案 1 :(得分:0)
您有一个链接列表,因此您的访问权限是O(n).. 我看到两个选择:更改容器或使用辅助容器来加速直接访问(增加空间复杂性)。 你不会找到一个对所有治疗都有O(1)复杂性的神奇容器。
答案 2 :(得分:0)
在标准链表中,没有办法(没有附加指针)快速访问列表中的元素,因为对所述元素的唯一引用发生在它前面的元素中。
如果您知道经常需要访问索引已知的元素,那么最好只使用数组。 (虽然重新阅读了这个问题,但这仍然没有任何删除元素的好处)