2017-03-17 7 views
-3

このコードが最初のノードを正しく削除するか、リストの頭を必ずポインタとして渡す必要があるかどうかを知りたいですか?リンクリストの最初のノードを削除する(C++)

void List::deleteFirst()   
{ 
temp = head; 
head = head->next; 
delete temp; 
} 

これは、ヘッドの元の値によって指し示されるデータを削除するクラスList

class List 
    { 
    private: 
      struct node 
      { 
       int data; 
       node * next; 
      }; 
      node * head; 
      node * curr; 
      node * temp; 
    public: 
      //List(); 
      //void AddNode(int addData); 
      //void DeleteNode(int delData); 
      void deleteFirst(); 
      //void PrintList(); 
}; 

答えて

-2

うんあります。

5

これは場合にのみ、少し動作します:あなたのノードは、あなたが(リストが空でない)headは常に有効なノードを指していることを確認しnew

  • を使用して割り当てられている

    それ以外の場合、未定義の動作が発生します。

    しかし、あなたは本当にメンバー変数としてtempを保存すべきではありません。代わりにローカル変数でなければなりません。

    変数がcurrの場合は、実際にメンバーになる必要があることを確認してください。

    また、オブジェクト(ノードなど)を削除すると、残りのポインタはすべて無効になるため、後でそのオブジェクトにアクセスしようとしないように注意してください。 curr*ポインタを使用します。

  • 関連する問題