【发布时间】:2017-02-22 02:27:02
【问题描述】:
我有一个 n 个节点的链表,我想删除第 k 个节点并显示其中的元素。如果 n 的值相对较小并且问题的复杂性不是问题,这很容易。
问题是当我在链表中有 n 个节点,其中 n >=200000 并且我想删除一个节点,该节点也是一个相对较大的值(比如 k=150000)。
这个问题的正常解决方案是遍历整个链表并删除一个节点(解决方案的复杂度为 O(n) ),虽然它是直接且简单的解决方案,但需要更多时间。这个问题的其他解决方案可以是 2 个指针,但这仍然不是最佳解决方案。
我正在寻找一种最佳的解决方案,并在最短的时间内提供结果。
希望我的问题很清楚。需要帮助..
【问题讨论】:
-
这只是一个面试问题还是你有一个真实世界的场景?如果以后,您能否就其他事情提供更多见解,例如您可以控制什么以及可以改变什么?
-
如果你有一个单链表,那么你唯一的选择就是 O(n) 解决方案。是否允许修改数据结构以添加更多信息?就像其中一个答案所建议的那样维护对中间节点的引用列表?
标签: algorithm data-structures linked-list time-complexity skip-lists