我已将此列表制成结构体,并且需要一次遍历并删除其中一个元素,我已经搜索了类似的问题,但仍然不知道如何执行此操作。
缺点是代码,有人可以告诉我该怎么做吗?

//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/

10-12 12:31
查看更多