2016-03-25 20 views
1

私はFindというメソッドを持っています。これは、ユーザーが要素の値を入力すると、* nptという新しいノードにアドレスが保存されます。前のノードのアドレスを使用してノードを削除する

引数として* nptを使用すると、nptに保存された値の後の値を削除するdeleteメソッドを作成することになっています。

たとえば、これが私のリストの場合: 134、564、674、253、および検索で674を入力すると、253が削除されます。

void LinkedList::Delete(Node *PrePosition){ 
Node *temp = PrePosition -> next; 
PrePosition->next = PrePosition->next->next; 
delete temp; 
} 

しかしこれに伴う問題、現在ヘッドノードを削除する方法がないということである。

現在、これは削除機能のための私のコードです。私が与えられた唯一のヒントは、これは本当に助けになりません: リストの先頭を削除する場合は、PrePositionはNULLです。

+0

おそらく 'LinkedList'クラスは、リストの先頭を結ぶ' head'呼ば 'ノード*'ポインタを持っています。したがって、あなたの引数に 'NULL'を取得した場合は、先頭のポインタを使って同じコードを実行してください。 –

+0

これはおそらく私の部分で信じられないほど馬鹿に聞こえるでしょうが、Findメソッドはintを必要とします。どのように引数をNULLに設定することが可能でしょうか? – Bob

+0

@Bobあなたのコードが許せば '-1'を返すことができます。 –

答えて

0

再帰バージョンを実行する必要があるとします。 ヘッドの条件を作成します。検索で:

削除で今
Node* find(T value){ 
    if (head->value == value) 
     return nullptr; 
    return find(head->next); 

void Delete(Node * pre) { 
    Node* temp; 
    if (pre == nullptr) { 
     temp = head; 
     head = head->next; 
    } else { 
     temp = pre->next; 
     pre->next = pre->next->next; 
    } 
    delete temp; 
} 
+0

このメソッドは、私が入れたどの値もノードを削除しないようにしていますか?タイプミスの場合にはエラーの余地が残っているようです。 – Bob

+0

nullptrを渡すと、頭が削除されます。そのようにしたくない場合は、削除ヘッド機能を作成してください。この削除機能はプライベートにする必要があるので、誤植をしているのはあなただけです... – user2913685

関連する問題