Três maneiras de excluir a lista vinculada unilateral da série de aprendizagem de estrutura de dados

  • Método 1:
  • Exclua o nó após o nó principal da lista vinculada unilateral, ou seja 头删法, o código é o seguinte:
  • Código de amostra:
int delete_link_list_1(node_t *phead){
    
    

    if(NULL == phead){
    
    

        printf("入参为NULL\n");

        return -1;

    }

    if(NULL == phead->next){
    
    


        printf("链表只有一个头结点,无其他的结点\n");

        return -1;

    }

    node_t *pdel = phead->next;

    phead->next = pdel->next;

    free(pdel);

    pdel = NULL;

    return 0;

}
  • Passos:
  • 1. Defina o nó a ser excluído pdele aponte o campo ponteiro do nó principal para o endereço do nó a ser excluído, ou seja node_t *pdel = phead->next;
  • 2. O endereço do nó após o nó a ser excluído aponta para o campo ponteiro do nó principal, a saber phead->next = pdel->next;
  • 3. Utilize a função free para liberar o espaço ocupado pelo nó a ser excluído, a saber free(pdel);
  • 4. Para evitar a geração de ponteiros curinga, atribua NULL ao endereço do nó a ser excluído, a saber pdel = NULL;
  • Método 2:
  • Exclua o último nó da lista vinculada unilateral, ou seja 尾删法, o código é o seguinte:
  • Código de amostra:
int delete_link_list_2(node_t *phead){
    
    

    if(NULL == phead){
    
    


        printf("入参为NULL\n");

        return -1;

    }

    if(NULL == phead->next){
    
    


        printf("链表只有一个头结点,无其他的结点\n");

        return -1;

    }

    //遍历链表,找到倒数第二个结点

    node_t *ptemp = phead;

    while(NULL != ptemp->next->next){
    
    

        ptemp = ptemp->next;

    }
    free(ptemp->next);

    ptemp->next = NULL;

    return 0;

}
  • Passos:

  • 1. Use while循环, percorra a lista vinculada unidirecional, encontre 倒数第二个结点, ou seja ptemp;

  • 2. 释放ptemp的指针域,并赋值NULL, excluindo assim o último nó da lista vinculada;

  • Método 3:

  • Especifique a posição do nó na lista vinculada e, em seguida 根据位置,删除待删结点, o código é o seguinte:

  • Código de amostra:

int delete_link_list_3(node_t *phead,int pos){
    
    

    if(NULL == phead){
    
    


        printf("入参为NULL\n");

        return -1;

    }

    if(NULL == phead->next){
    
    


        printf("链表只有一个头结点,无其他的结点\n");

        return -1;

    }

    if(pos < 0){
    
    

        printf("删除位置不合理,删除失败\n");

        return -1;

    }
    node_t *ptemp = phead;

    int i = 0;

    for(i = 0; i < pos; i++){
    
    

        ptemp = ptemp->next;


        if(NULL == ptemp->next){
    
    

            break;

        }
        
        

    }
    if(i < pos){
    
    

        printf("删除位置不合理,删除失败\n");

        return -1;


    }
    node_t *pdel = ptemp->next;

    ptemp->next = pdel->next;

    free(pdel);

    pdel = NULL;

    return 0;

}

  • Passos:
  • 1. Encontre o nó anterior do nó a ser excluído ptemp;
  • 2. Defina o nó a ser excluído, deixe o campo ponteiro do nó antes do nó a ser excluído apontar para o endereço do nó a ser excluído e faça backup do nó a ser excluído, ou seja node_t *pdel = ptemp->next;
  • 3. O campo de ponteiro do nó a ser excluído aponta para o campo de ponteiro de um nó antes do nó a ser excluído, ou seja, o endereço do nó atrás do nó a ser excluído aponta para o campo de ponteiro de um nó antes do nó a ser excluído, a saber ptemp->next = pdel->next;
  • 4. Utilize a função free para liberar o espaço ocupado pelo nó a ser excluído, a saber free(pdel);
  • 5. Para evitar a geração de ponteiros curinga, atribua NULL ao endereço do nó a ser excluído, a saber pdel = NULL;

Supongo que te gusta

Origin blog.csdn.net/qq_41878292/article/details/132651978
Recomendado
Clasificación