从链表中删除元素
Delete an element from a linked list
我想做一个方法,从列表中删除称为"archivo"的元素,如果cantLineas=0,该方法删除一切刚刚好,但我不能使它把指针指向NULL时列表已被完全删除。下面是我写的代码:
struct archivo
{
char * nombre;
int cantLineas;
archivo * sig;
};
void borrarArchivos(archivo * listaArchivos){
archivo * ant=NULL;
while(listaArchivos!=NULL){
if(listaArchivos->cantLineas==0){
if(ant!=NULL){
ant->sig=listaArchivos->sig;
delete listaArchivos;
listaArchivos=ant->sig;
}else{
ant=listaArchivos;
listaArchivos=listaArchivos->sig;
delete ant;
ant=NULL;
}
if(ant==NULL && listaArchivos==NULL){
listaArchivos=NULL;
}
}else{
ant=listaArchivos;
listaArchivos=listaArchivos->sig;
}
}
}
您通过值传递指针listArchivos
,您必须通过引用传递它。为了实现这一点,你必须传递一个双指针或对指针的引用(见下面的代码):
双重指针:
void borrarArchivos(archivo **listaArchivos) {
archivo *ant=NULL;
while(*listaArchivos!=NULL){
if((*listaArchivos)->cantLineas==0){
if(ant!=NULL){
ant->sig=(*listaArchivos)->sig;
delete *listaArchivos;
*listaArchivos=ant->sig;
}else{
ant=*listaArchivos;
*listaArchivos=(*listaArchivos)->sig;
delete ant;
ant=NULL;
}
if(ant==NULL && *listaArchivos==NULL){
*listaArchivos=NULL;
}
}else{
ant=*listaArchivos;
*listaArchivos=(*listaArchivos)->sig;
}
}
}
指针引用:
void borrarArchivos(archivo *&listaArchivos){
archivo * ant=NULL;
while(listaArchivos!=NULL){
if(listaArchivos->cantLineas==0){
if(ant!=NULL){
ant->sig=listaArchivos->sig;
delete listaArchivos;
listaArchivos=ant->sig;
}else{
ant=listaArchivos;
listaArchivos=listaArchivos->sig;
delete ant;
ant=NULL;
}
if(ant==NULL && listaArchivos==NULL){
listaArchivos=NULL;
}
}else{
ant=listaArchivos;
listaArchivos=listaArchivos->sig;
}
}
}
更好的是,使用c++ STL的强大功能,使用智能指针代替原始的C指针,并利用STL容器(如std::vector
)来管理和存储对象。
相关文章:
- C++如何通过用户输入删除列表元素
- 使用函数"remove"删除重复元素
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 删除列表中的第n个元素
- 从矢量中删除元素后出现隔离错误
- 删除映射和分割错误中的一个过去结束元素
- 如何使用remove_if从矢量中删除元素
- 如何从使用 for 循环中的矢量大小的矢量中删除元素
- 从矢量中删除空元素
- 关于比较两个无序数组并删除 a[] 中可以在 b[] 中找到的元素的问题
- 删除指针数组 (C++) 中的元素
- 删除列表 c++ 中的最后 3 个元素
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 为什么通过 vector<reference_wrapper> 的元素删除引用的值<T>不会使向量无效?
- 从std::multiset的第i个元素删除到末尾
- 删除 [] 是否等于每个元素删除.C++
- std::列出元素删除后节点的内存回收