2011-06-02 135 views
0

我似乎無法擺脫一個額外的鏈接列表。我知道有很多方法可以做到,但我只想簡單地釋放它,因爲它是在我的循環中創建的。下面的代碼:刪除最後一個鏈接列表

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; 
    } 

回答

1

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

free(current) 
if(prev !=NULL) 
prev->next = Null; 
+0

prev在代碼中的任何位置聲明瞭哪裏? – GWW 2011-06-02 04:49:48

+0

ahhh,非常感謝你 – 2011-06-02 05:16:42

+0

回答編輯顯示prev的初始化。 – user209051 2011-06-02 18:42:01

0

一種方式是永遠不會創建擺在首位額外的節點代替最後部分的代碼。從文件中讀入一個臨時變量,並且在你知道需要它之前不要創建下一個節點。

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); 
} 
+0

我認爲它應該是'temp [i] = toupper(temp [i])''。 – Genzer 2011-06-02 05:31:58

+0

是的,它應該!謝謝。 – Dewb 2011-06-03 08:06:02