Удаление последнего связанного списка - PullRequest
0 голосов
/ 02 июня 2011

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

    current = first = malloc (sizeof (NODE));
    while( fscanf( fin, "%s", current -> seq) != EOF) {
            for (i = 0; i < 300; i++){
                    if (current->seq[i] == 'a')
                            current->seq[i] = 'A';
                    else if (current->seq[i] == 't')
                            current->seq[i] = 'T';
                    else if(current->seq[i] == 'g')
                            current->seq[i] = 'G';
                    else if(current->seq[i] == 'c')
                            current->seq[i] = 'C';
            }
            if ( (current -> next = malloc ( sizeof(NODE) ) ) == NULL){
                    fprintf(fout, "Out of memory\nCan't add more DNA sequences\n");
                    return EXIT_FAILURE;
            }
            current = current -> next;
    }

Ответы [ 2 ]

1 голос
/ 02 июня 2011

заменить последнюю часть кода на

prev= NULL;
current = first =...
...
} //end if
prev = current;
current = current->next;
} //end while

free(current)
if(prev !=NULL)
prev->next = Null;
0 голосов
/ 02 июня 2011

Один из способов - никогда не создавать дополнительный узел.Прочитайте из файла временную переменную и не создавайте следующий узел, пока не убедитесь, что он вам нужен.

NODE* first;
NODE** ppCurrent = &first;

while( fscanf( fin, "%s", temp) != EOF) 
{
    if ((*ppCurrent = malloc(sizeof(NODE))) == NULL)
    {
        fprintf(fout, "Out of memory\nCan't add more DNA sequences\n");
        return EXIT_FAILURE;
    }

    for (i = 0; i < 300; i++)
        temp[i] = toupper(temp[i]);

    (*ppCurrent)->seq = temp;
    ppCurrent = &((*ppCurrent)->next);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...