Как перевернуть связанный список - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь перевернуть связанный список, возвращая перевернутый список.

typedef struct lligada 
{

     int valor;
     struct lligada *prox;

} *LInt;

Это моя функция:

LInt reverseL (LInt l){

    LInt aux = malloc (sizeof(struct lligada));

    if(l != NULL){

            while( l -> prox != NULL){
                aux = l-> prox;
                aux -> prox = l;
                l = l-> prox;
            }


    }

    else return NULL;

    return aux;
}

Можете ли вы помочь мне, пожалуйста?

Я пытался сделать это:

if(l != NULL){

        if(l -> prox == NULL) {
            aux = l;
        }

        else{
            while( l -> prox != NULL){
                aux = l-> prox;
                aux -> prox = l;
                l = l-> prox;
            }
            aux -> prox = l;
        }

}

Это хорошая идея?

1 Ответ

1 голос
/ 29 марта 2019

Прежде всего, вызов malloc в этом случае бесполезен, и это утечка памяти.

Этот фрагмент не работает, потому что вы создаете бесконечный цикл между первыми двумя элементами

if (l != NULL) 
{
    if (l->prox == NULL) 
    {
        aux = l;
    }
    else 
    {
        while (l->prox != NULL) 
        {
            aux = l->prox;
            aux->prox = l;
            l = l->prox;
        }
        aux->prox = l;
    }
}

Вы можете изменить так

LInt new_head, aux;
new_head = NULL;
while (l != NULL) 
{
    aux = l->prox;
    l->prox = new_head;
    new_head = l;
    l = aux;
}

return new_head;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...