我理解得对吗?(从虚拟节点开始)
dummy->a->b->c->d->dummy(环绕到dummy节点)
因此,如果我想删除第一个实际的数据段(A),我需要将它分配给一个临时变量。所以Node first=head.next。然后我需要有一个虚拟的头部引用“B”,所以我需要做head.next=first.next。这就是所有需要做的吗?
private Node remove()
{
Node returnNode = head.next;
head.next = returnNode.next;
return returnNode;
}
在从列表中删除任何节点N的情况下(假设它在列表中),这是一种相同的概念?从上面的例子来看,假设我们要删除节点B,在这种情况下,我们需要设置B.next=B.previous和B.previous=B.next correct?或者我需要做类似b.previous.next=b.next和b.next.previous=b.previous这样的事情吗?我需要遍历列表来找到要移除的元素吗?
private void removeNode(Node n)
{
n.next = n.previous; // or n.previous.next = n.next
n.previous = n.next; // or n.next.previous = n.previous
}
双链表意味着每个节点也有一个到previouse节点的连接。
您的示例将只切换下一个和上一个引用。您应该设置:
n.next.previous=n.previous n.previous.next=n.next
我有一个基本的链表问题,我在下面试图解决。如果您能为我的方法、算法的正确性(甚至是编码风格)提供任何信息,我将不胜感激。该问题需要一个函数,该函数删除循环链表中所有出现的int,并返回列表中的任何节点或NULL(当列表为NULL时)。 以下是我目前掌握的一些C代码:
我在以递归方式从循环单链表中删除单个节点/值时遇到了一些问题(当然,如果可能的话)。我的代码只从中间删除,而不是从第一个或最后一个地方删除。 在以递归方式删除其中一个连接后,我不知道如何建立连接。我的意思是,如果我要删除第一个元素,那么我需要将最后一个节点连接到下一个节点。 这是我的代码: 参数和返回: 查找尾部功能:
我试图从基于阉羊的双链表中删除一个元素,该列表中的节点满足返回bool的函数。由于某种原因,替换节点的前一个指针(下一个被删除)不更新,而是引用回它自己。 我的代码 测试结果
每次我运行我的双链接列表时,除了从列表后面删除外,所有方法都有效。我有一张4,3,9的单子。我从前面拆下(这拿走了4个)。然后,我调用了这个方法,它应该只删除9。相反,当我调用DL列表时,它返回null(这也删除了3)。请帮忙。 下面是代码的其余部分(它扩展了一个接口;生成的代码对于这个问题不是必需的,所以我们没有填写它。也就是说,节点后面的内容无关紧要)正确的代码:
这是我的remove函数,用于删除具有元素的节点。我得到了一个seg错误,我很确定这是因为temp->prev是前面的哨兵,所以从技术上来说,它不在双链表中。如果这是正确的,我实际上如何防止这种情况?如有任何帮助,不胜感激。 编辑:刚刚更新了代码,但仍然出现了Seg错误
问题内容: 我在面试中被问到以下问题:“如何检测链表中的循环?”,我解决了这个问题,但立即面试官问我如何删除链表中的循环。我摸索了 那么关于如何解决这个问题的任何指针,可能是伪代码还是方法定义? 我对Java很满意,因此已在Java下标记了这个问题。 对于实例,此链接列表具有循环 问题答案: 此问题有两个部分: 检测列表中是否存在循环 确定循环的开始 一旦知道了循环的开始位置,就很容易识别列表中的