(IN C) Почему это слияние двух списков, кроме слияния, также добавляет много бесполезных узлов? - PullRequest
0 голосов
/ 30 ноября 2019

Код для структур:

typedef struct nodo_int *lista_int;

struct nodo_int{
    int info;
    lista_int next;
}nodo_int;

Код для визуализации списков и их чередования в одном:

void visNode(int value){
    printf("| %d |", value);
}

void visList(lista_int l){
    if(l != NULL){
        visNode(l->info);
        visList(l->next);
    }
}

lista_int alternateLists(lista_int l1, lista_int l2){
    lista_int l3 = makesNode();
    lista_int temp = l3, newNode = NULL;

    if(l1 == NULL)
        return l2;
    else if(l2 == NULL)
        return l1;

    while(l1 != NULL && l2 != NULL){
        newNode = makesNode();
        newNode->info = l1->info;
        temp->next = newNode;
        temp = newNode;
        l1 = l1->next;

        newNode = makesNode();
        newNode->info = l2->info;
        temp->next = newNode;
        temp = newNode;
        l2 = l2->next;
        printf("\n1\n");

    }

    return l3->next;
} 

В основном:

int main(){
    lista_int l1, l2;
    l1 = generateList();
    l2 = generateList();    
    printf("\nFirst list:\n");
    visList(l1);
    printf("\n\nSecond lists:\n");
    visList(l2);
    printf("\n\nNew list obtained from merging the other two:\n");
    lista_int l3 = alternateLists(l1, l2);
    visList(l3);
    return 0;
}

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

...