通常把尾巴储存起来是个好主意。如果我们考虑在末尾添加一个项目的复杂性(如果这是一个通常要做的操作),那么搜索尾部的时间将是O(n)个,如果存储它,则是O(1)个。
您可以考虑的另一个选择是使您的列表双链接。这样,当您想要删除列表的末尾时,通过存储tail,您可以在O(1)个时间内删除节点。但是,这将导致每个列表元素存储一个额外的指针(并不昂贵,但它会累加起来,对于内存受限的系统来说,这应该是一个考虑因素)。
最后,这一切都是关于你需要做的操作。如果您从不添加、删除或从列表末尾开始操作,那么就没有理由这样做。我建议分析最常见操作的复杂性,并以此为基础做出决定。
我尝试实现循环链表的insert方法。我想我取得了一些成功。 问题:当我显示列表时。display方法将循环,因为链接的每个next变量都链接到一个非Null节点对象。所以head永远不会是空对象。根据我对单链表的回忆,head总是指向列表中的第一个节点或其中包含数据的第一个节点。 我对循环链表的概念理解:根据我的理解,循环链表有点像一个单链表,但有一点小的变化:尾部对象的下一个变量指向头部。 来
我有一个基本的链表问题,我在下面试图解决。如果您能为我的方法、算法的正确性(甚至是编码风格)提供任何信息,我将不胜感激。该问题需要一个函数,该函数删除循环链表中所有出现的int,并返回列表中的任何节点或NULL(当列表为NULL时)。 以下是我目前掌握的一些C代码:
我需要实现一个循环的单链表数据结构。我无法理解的是何时何地必须声明列表的最后一个节点必须指向第一个节点。我有以下空构造函数来构建列表: 因此,基本上每个列表都以一个null对象开始,该对象再次指向null,表示列表结束: 然而,我不知道的是如何使它当列表包含至少一个节点时,该节点将指向列表的第一个节点。 例如,看看我为常规链表实现的addLast()方法: 我必须把它变成这样: 一旦列表的下一个节
给定一个单链表和中间节点从一开始的编号,我试图通过将最后一个节点指向中间节点来创建一个循环单链表。我写了以下代码: 然而,Linkedlist的最后一个节点仍然指向null而不是中间节点。我明白我哪里出错了,我找不到它。请帮忙。
我理解得对吗?(从虚拟节点开始) dummy->a->b->c->d->dummy(环绕到dummy节点) 因此,如果我想删除第一个实际的数据段(A),我需要将它分配给一个临时变量。所以Node first=head.next。然后我需要有一个虚拟的头部引用“B”,所以我需要做head.next=first.next。这就是所有需要做的吗? 在从列表中删除任何节点N的情况下(假设它在列表中),这是
我有一个两个项目的列表,每个项目是一个文本字符串。我想围绕这两个项目循环,如果一个单词不在一组单词中,则基本上删除它。但是,下面的代码将所有单词放在一起,而不是创建两个单独的项。我希望我的更新列表包含两个项目,每个原始项目对应一个im更新: