我已将此列表制成结构体,并且需要一次遍历并删除其中一个元素,我已经搜索了类似的问题,但仍然不知道如何执行此操作。
缺点是代码,有人可以告诉我该怎么做吗?
//Estructura para guardar pid's
struct pid
{
int numero;
int numero_padre;
struct pid *next;
struct pid *ahead;
};
struct pid *head = NULL;
struct pid *curr = NULL;
// Primer Nodo
struct pid* creaLista(int numero)
{
printf("\n Creando lista con el primer valor: [%d]\n",numero);
struct pid *ptr = (struct pid*)malloc(sizeof(struct pid));
if(NULL == ptr)
{
printf("\n Fallo al crear la lista \n");
return NULL;
}
ptr->numero = numero;
ptr->next = NULL;
head = curr = ptr;
return ptr;
}
struct pid* agregaALista(int numero, bool agrega_al_final)
{
struct pid *next = NULL;
//Si lista vacia
if(NULL == head)
{
return (creaLista(numero));
}
if(agrega_al_final)
printf("\n Agregando nodo al final de la lista [%d]\n", numero);
else
printf("\n Agregando nodo al comienzo de la lista [%d]\n",numero);
//Reservar espacio para nuevo nodo
struct pid *ptr = (struct pid*)malloc(sizeof(struct pid));
if(NULL == ptr)
{
printf("\n Fallo al agregar nodo \n");
return NULL;
}
ptr->numero = numero;
ptr->next = NULL;
if(agrega_al_final)
{
curr -> next = ptr;
curr = ptr;
}
else
{
ptr->next = head;
head = ptr;
}
return ptr;
}
void imprimeLista(void)
{
struct pid *ptr = head;
printf("\n -------Inicio de lista------- \n");
while(ptr != NULL)
{
printf("\n [%d] \n",ptr->numero);
ptr = ptr->next;
}
printf("\n -------Fin lista------- \n");
return;
}
/*void quitardeLista(int numero, bool quita_al_final)
{
struct pid *ptr = head;
struct pid *del = NULL;
//Si lista vacia
if(quita_al_final)
printf("\n quitando nodo al final de la lista [%d]\n", numero);
else
printf("\n quitando nodo al comienzo de la lista [%d]\n",numero);
//Reservar espacio para nuevo nodo
ptr->numero = numero;
if(quita_al_final)
{
curr->ahead = ptr;
curr = ptr;
rmv(del);
//free (del);
}
else
{
ptr->next = head;
head = ptr;
//free (del);
}
return ptr;
}*/
void borraLista(int i, int numero)
{
struct pid *ptr = head;
struct pid *del = NULL;
while ( ptr->next != NULL)
{
if(i == numero)
{
curr -> next = ptr;
curr = ptr;
printf("\n Se borrará [%d] \n",ptr->numero);
del = ptr;
free (del->next);
printf("\n Borrado! \n");
}
else
{
ptr->next = head;
head = ptr;
printf("\n Se borrará [%d] \n",ptr->next);
del = ptr;
free (del->next);
printf("\n Borrado! \n");
}
return ptr;
/* ptr->next = head;
head = ptr;
printf("\n next [%d] \n",ptr->next); */
}
printf("\n next [%d] \n",ptr->next);
return ptr;
//ptr = ptr->ahead;
//curr -> ahead;
}
/* while(ptr != NULL)
{
printf("\n Se borrará [%d] \n",ptr->numero);
del = ptr;
ptr = ptr->next;
free (del->next);
printf("\n Borrado! \n");
}
if(ptr != NULL)
{
printf("\n Se borrará [%d] \n",curr->numero);
del = curr;
curr = curr->ahead;
free (del->ahead);
printf("\n Borrado! \n");
}*/
//head = NULL;
//}
int main(void)
{
int i = 0;
int r = 0;
// Inicializando contenedor
struct pid *ptr = NULL;
for(i; i<10; i++)
{
r = rand() % 9999;
agregaALista(i,true);
}
imprimeLista();
borraLista(i,true);
}
最佳答案
看一下定义:
void borraLista(int i, int numero)
和电话:
borraLista(i,true);
您正在呼叫borraLista与
i =(在for循环之后它具有什么值)
numero = true,
因此,borraLista中的这一行永远不会正确:
if(i == numero)
关于c - 如何一次在线删除struct的一个元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25289747/