c - 如何删除具有链表特定数据的所有节点
问题描述
我有下一个问题。我有删除一个值为int的链表节点的功能,但是我需要用这个值删除链表中的所有nothes,我该怎么做?,这里是删除一个具有该值的节点的功能
nodoLista* borrarMesLista(nodoLista* lista, int mes){
nodoLista* seg;
nodoLista* ante;
if(lista != NULL && mes == lista->dato.mes){
nodoLista* aux = lista;
lista = lista->sig;
free(aux);
}else{
seg=lista;
while(seg != NULL && mes != seg->dato.mes){
ante=seg;
seg= seg->sig;
}
if(seg != NULL){
ante->sig = seg->sig;
free(seg);
}
}
return lista;
}
解决方案
这不是一个非常有效的方法,还有其他很好的方法可以做到这一点。
但是在下面使用您将对您的代码进行最小的更改
要删除同一元素的所有条目,您可以borrarMesLista
通过添加一个额外的参数来稍微修改您的函数removed
,该参数可用于确定是否删除了一个元素。
的初始值removed
将是0
,如果一个元素被删除,那么 make removed = 1
。
nodoLista* borrarMesLista(nodoLista* lista, int mes, int *removed){
nodoLista* seg;
nodoLista* ante;
if(lista != NULL && mes == lista->dato.mes){
nodoLista* aux = lista;
lista = lista->sig;
free(aux);
*removed = 1;
}else{
seg=lista;
while(seg != NULL && mes != seg->dato.mes){
ante=seg;
seg= seg->sig;
}
if(seg != NULL){
ante->sig = seg->sig;
free(seg);
*removed = 1;
}
}
return lista;
}
此外,当您打电话时,borrarMesLista
您需要一些控制代码来控制此过程必须持续多长时间。只要列表中存在重复元素,此过程就会继续。
int removed = 0;
while( 1 )
{
if(removed)
removed = 0;
lista = borrarMesLista(lista, mes, &removed);
if(!removed)
break;
}
推荐阅读
- android - Tasker 锁定任务不起作用
- java - 缓存枚举值
- python - python - 如何在Python中使用monkeypatch模拟不属于任何类的函数?
- excel - 从 Microsoft Excel 中的文本中检索特定字母
- python - 有没有办法将文件中的 4 字节 UTF-8 编码字符存储为 Python 中的两个字符?
- reactjs - react-three-fiber:将函数作为参数传递给孩子会导致错误“无法在'Worker'上执行'postMessage'”
- c++ - 无法识别 C++ 类实例的问题
- javascript - CSS 导致画布游戏按钮和屏幕点击中断。我如何解决它?
- reactjs - Cookie 未在跨域 react-flask 应用程序中发送
- javascript - 为什么将js语句传递给按钮中的onclick会立即激活?