假设我们已经有一个指向该节点的指针,则在列表的特定点插入或删除元素是恒定时间操作。-来自链接列表上的Wikipedia文章
单个链表中的链表遍历始终从头开始。我们必须继续努力直到满足给定条件。
因此,除非我们处理头节点,否则这将使任何操作都变得最糟O(n)。
我们不能直接链接列表中的给定指针。那么为什么说这是一个恒定时间的操作呢?
编辑:即使我们有一个指向该节点的指针,我们也必须从头开始才对吗?那么恒定时间运行如何
首先:LinkedList
Sun
JDK中实现的有效地具有到最后一个元素以及到第一个元素的链接(只有一个head
条目,但head.previous
指向最后一个元素)。这意味着即使在最坏的情况下,通过列表导航到索引所指示的元素也应执行n
/ 2次操作。这也是一个双向链表。
除此之外:LinkedList
因为不需要遍历所有元素,所以简单地将O(1)插入a的开头或结尾。
在其他任何地方插入/删除都取决于您执行的方式!如果使用Iterator
(的a
ListIterator
表示加法),则该操作也可以是O(1),因为该操作Iterator
已经具有对相关条目的引用。
但是,如果您正在使用add(int, E)
或remove(int)
,LinkedList
则将必须
找到 相关条目(O(n)), 然后 删除元素(O(1)),因此整个操作将为O(n)。
问题内容: 我正在做一个作业,告诉我假设我有一个带有标题和尾部节点的单链接列表。它要我在位置p之前插入项目y。有人可以查看我的代码并告诉我我是否走对了吗?如果没有,您能为我提供任何提示或指示(无双关语)吗? 我认为我可能是错的,因为即使在问题描述中特别提到了头和尾节点,我也根本不使用头和尾节点。我正在考虑编写一个while循环来遍历列表,直到找到p并以这种方式解决问题,但这不是固定时间的,对吗?
据说 LinkedList 删除和添加操作的复杂性为 在 的情况下,它是 大小为“M”的数组列表的计算:如果我想删除第N个位置的元素,那么我可以使用index一次直接转到第N个位置(我不必遍历到第N个索引),然后我可以删除元素,直到此时复杂度为O(1),然后我必须移动其余的元素(M-N次移动),所以我的复杂度将是线性的,即O(M-N-1)。因此在最后删除或插入会给我最好的性能(如N ~ M ),而
好吧,关于LinkedList和ArrayList有很多讨论,但当我在《用Java思考》中看到这个描述时,我仍然感到困惑: LIKEDList还实现了基本的列表接口,如ARARYLIST DO,但是它比ARARYList更有效地执行某些操作(列表中的插入和删除)。 我不知道为什么它强调“在列表的中间”,我想在列表的开头插入时,ArrayList也需要转移后面的元素,而且它比LinkedList快吗
我正在尝试执行GET命令,以便我可以从服务器获取数据。下面的Curl适用于Postman。 在运行我的代码时,我能够获取会话ID。下一步是获取数据。但是当我执行GET时,我没有得到任何响应。相反,我得到一个错误,如下所示:“指定的值具有无效的HTTP标头字符。(参数'name')” 下面是我试图执行的C代码 问题:我没有收到来自服务器的响应,响应长度为零。 以下是答案:0 回答ErrorMessa
我正在读取删除单链接列表的最后一个元素的算法。假设我有一个名为ListNode的链接列表对象: 我发现删除列表最后一个节点的方法是: 我很困惑这个代码是如何工作的,因为一切都是通过“节点”。然而,当返回头时,最后一个节点被删除。因此,我想知道它是如何工作的,是否与Java中的“价值传递”有关?
问题内容: 数据库:ORACLE 我们为休眠使用了改良的NamingStrategy,在hbm文件中,我们明确给出了表名。 但是,仍然在删除和插入操作期间,它会针对某些表生成作为前缀的“ T_”和作为前缀的“ HT_”。 这导致SQLGrammarException: org.hibernate.exception.SQLGrammarException:无法执行语句 请注意,这是在使用Oracl