gpt4 book ai didi

java - 从 LinkedList 的开头删除所有

转载 作者:行者123 更新时间:2023-12-03 21:43:46 24 4
gpt4 key购买 nike

我正在浏览 LinkedList API对于 Java 7 并注意到一些奇怪的事情。似乎没有“删除之前(或之后)”类型的方法。例如,如果我有一个 100 元素的 LinkedList,我想删除前 20 个元素,Java 似乎强制你一次删除一个,而不是将起始指针移动到第 21 个元素并删除 20 个元素之间的链接和 21. 看起来这是一个可以在 O(1) 时间内完成的操作,而不是 O(n) 时间,因为 Java 似乎强制你这样做。

我是不是遗漏了什么,或者这只是 Java 中一个明显的漏洞?

编辑

我知道 List 接口(interface)中的 sublist(int, int) 方法。我仍然认为这比通用的“砍掉第一个(或最后一个)n”用例的效率略低。

编辑 2

感谢所有指出找到第 n 个元素不是 O(1) 的人。不管砍掉前 n-1 个元素是否容易,找到第 n 个元素仍然需要 O(n) 的时间。

但是,正如 Dilum Ranatunga 指出的那样,迭代器有可能已经存在于给定位置。在这种情况下,说“我在这里,把我前面的都删除”仍然有用。

最佳答案

无论你做什么,它仍然是一个 O(n) 操作。

您无法直接访问链表的各个节点,因此您必须先遍历链表才能访问第 21 个节点。一旦你到达那里,“重新排列”列表的时间将是 O(1),但对于整个原子操作,它仍然是 O(n)。

关于java - 从 LinkedList 的开头删除所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11546949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com