删除链表中任意位置的节点
deleting a node anywhere in a linked list
我知道如何从单链表的前面删除一个节点,但是我不知道如何从任意位置删除一个节点。
在我的具体问题中,我继续向链表中的每个节点传递一个整数值x。我可以添加和删除,但是我需要编写一个函数,如果我确定了两个相同的x,我就删除另一个实例。
如果有人需要我到目前为止所做的事情的例子,我可以给出我的代码的例子。感谢所有的回复
另外,我正在使用一个单链表。
这是单链表的缺点。它需要迭代来执行删除,因为您无法找到任意元素的前一个元素。你能找到的是它的下一个元素。您必须从列表的头部开始迭代以找到它的前一个元素。
因为每个节点只有到后续节点的链接,所以您必须遍历整个列表以获得前一个元素,然后将前一个元素与下一个节点链接起来。
当我在查看列表时,我所做的是:当遍历列表时,我将指向前一个元素的指针保存在一个单独的变量中,如果我决定需要删除当前元素,我已经拥有指向前一个元素的指针了。
所以,伪代码方面(为了更好地说明它),它应该是这样的:prevValue = NULL
for curValue = root; curValue != NULL; curValue = curValue->Next
LOOP
IF *need to delete curValue*
THEN
IF prevValue == NULL
THEN
root = curValue->Next
delete curValue
curValue = root
ELSE
prevValue->Next = curValue->Next
delete curValue
curValue = prevValue
END IF
END IF
prevValue = curValue
END LOOP
删除节点(节点头,int d) {
if(head==NULL)
cout<<"empty linked listn";
else {
node*curr=head,*pre=NULL;
while (curr!=NULL && curr->data !=d)
{
pre=curr;
curr=curr->next;
}
if(curr==NULL)
cout<<"Mahloch this number not foundn";
else {
if(pre==NULL)
head=curr->next;
else
pre->next=curr->next;
curr->next=NULL;
delete(curr); }
}return head;
}
相关文章:
- 如何在单个链表中交换两个节点的位置,只修改指针
- OMNET++:如何在INET4.0中手动设置节点位置
- 在 Omnet++ 中的模拟时间内更改/设置节点的新位置
- 包含具有无效位置的节点引用的方式
- 如何获得由drawnode函数制成的节点的位置
- 在链接列表前n位置中移动某个节点
- 在链表中的第 n 个位置插入节点
- 使用 C++ 在单向链表的指定位置插入节点时出现分段错误
- 通过指定第 n 个节点位置在单链接列表中插入数据
- 在ITH位置添加节点
- 如何从clang ast节点打印源位置
- 在链接列表C 中的某个位置插入节点
- 具有动态位置的主体节点形状
- 基于节点的类的子位置
- 在给定位置 c++ 中插入节点
- 普吉克斯姆.如何从节点获取所有子结构,如果事先不知道它的位置
- 如何在Igraph + C中保留节点的位置和名称
- 删除链表中任意位置的节点
- 在链表中的某个位置插入一个节点
- 粒子效果[CCParticleSystemQuad是否将其位置更改为其父节点]