2016-08-26 4 views
0

値が渡されたときにデザートノードを削除する必要があります。私はリンクされたリストを検索し、一致が現れ、ノードを削除してtrueを返します。値が見つからない場合はfalseを返します。C++固有のノードリンクリストの削除。コードは意味がありますか?

bool LinkedList::delNode(string flavor) 
{ 
    Dessert *pointer1 = head; 
    Dessert *ptrT; 
    while (pointer1 != NULL) { 
     if (pointer1->flavor != flavor) { 
      ptrT = pointer1; 
      pointer1 = pointer1->next; 
     } else { 
      ptrT->next = pointer1->next; 
      delete pointer1; 
      return true; 
     // Should I add a break here ? 
     } 
     else if(pointer1->next == NULL) { return false; } 
    } 
} 

ここでのコーディングがすべての可能なノードの場所に適しているかどうかは完全にはわかりません。

+0

ので、あなたは正直なところ、私はおそらく[** this ** **](http://pastebin.com/m9xcbHFQ)でしょう。 -ifは必要ではありませんが、return文がありません。ループが使い果たされ、 'poin ter1はNULLに達する。または空のリスト(ヌルヘッドポインタ)を送信するとどうなりますか? – WhozCraig

答えて

0

関数からreturnを取得すると、それ以上のステートメントは実行されないので、breakreturnの後に追加することで違いはありません。

+0

ああ、コードの残りの部分はどうですか? – Yousuf

0

if/ else if/ elseを適切な順序に保ちます。ここでは、else ifステートメントにはifというステートメントはありません。あなたはelseな状況にコードを実行している場合は、ptrTポインタを初期化する必要があります

error: 'else' without a previous 'if'

if (pointer1->flavor != flavor) { 
    ptrT = pointer1; 
    pointer1 = pointer1->next; 
} 
else if (pointer1->next == NULL) { return false; } 
else { 
    ptrT->next = pointer1->next; 
    delete pointer1; 
    return true; 
} 
0

エラーが発生することがあります(ちょうど約headノードを削除すると思うし、プログラムがクラッシュします。

bool LinkedList::delNode(string flavor) 
{ 
    Dessert *pointer1 = head; 
    Dessert *ptrT = NULL; 
    while (pointer1 != NULL) { 
     if (pointer1->flavor != flavor) { 
      ptrT = pointer1; 
      pointer1 = pointer1->next; 
     } 
     else if(pointer1->next == NULL) { 
      return false; 
     } 
     else { 
      if (ptrT == NULL) { 
       head = pointer1->next; 
      } 
      else { 
       ptrT->next = pointer1->next; 
      } 
      delete pointer1; 
      return true; 
     } 
    } 
    return false; 
} 
関連する問題