2012-04-13 16 views
-1

なぜ私の削除機能が機能していないのか分かりません。アイテムが削除された場合に返す必要があるブール値です。すべてのヘルプは、あなたがリスト - に電流を比較単一リンクリストからのノードの削除C

boolean delete(SLL *list, String str){ 
    NODE *current, *previous,*temp; 
    temp=malloc(sizeof(Employee)); 
    previous=NULL; 
    current = list -> head; 


    while(current->next!=NULL) { 
     if(strcmp(current->anEmployee->name, str) == 0){ 
      if(current=list->head){ 
       list->head=current->next; 
      } 

      if(previous->next == NULL){//item not found in list 
       return 0; 
      } 
     else { //current is to be deleted 
      temp->next=current->next; 
      previous->next=temp->next; 

      return 1; 
     } 
    } 
} 
+0

それについては動作しませんか? –

+3

if(current = list-> head){ は==ですか? – strkol

+1

また、関数内にメモリリークがあり、temp変数が不要です。 – strkol

答えて

2

あなたのif文>(最初にリストのルートノード、)頭をいただければ幸い、現在にノードを割り当てるのではなく、それを比較しています。

+0

ありがとうございます。まだ削除していない。 –

+0

ループの内部では、現在のノードではなくリストのルートノード(つまり:list-> head)を前進させるので、文字列の比較はlist-> headの名前と渡された名前を比較することしかありません。リンクリストからのノードの削除に関して、Sangeethsのリンクを読むのには時間を割く価値があります。 – thelazydeveloper

+0

また、以前のポインタはNULLに設定されています。渡された文字列がlist-> headの名前と一致しない場合は、segfaultする必要があります。 – thelazydeveloper