開始:これは宿題の問題の一部なので、答えをヒントするか、直接答えなくても正しい方向に向けるようにしてください。C++単一リンクリストで一致するノードに前ノードを取得
私はC++で単一のリンクリストを作成しています。必要な関数の1つはvoid remove(const T& key)
です。値が関数に渡されたキーの値と一致する場合は、特定のノードが削除されます。
私の現在の考え方は、最初に削除するノードを見つけて、削除するノードの前にあるノードを見つけて、削除するノードの後にノードを見つけることです。そこから私は削除が必要なノードを削除し、削除されたノードの後に来るノードに向けて前のノードを設定することができます。ここで
関連する関数です:
LinkedList.h
//Returns the node with passed in value key
ListNode<T>* find(const T& key) {
ListNode<T>* currentNode = _head;
while(currentNode != NULL && currentNode->data() != key){
currentNode = currentNode->next();
}
return currentNode;
}
//Returns the node before the key
ListNode<T>* findPreviousNode(const T& key){
ListNode<T>* previousNode;
ListNode<T>* currentNode = _head;
while(currentNode != NULL && currentNode->data() != key){
previousNode = currentNode;
currentNode = currentNode->next();
}
return previousNode;
}
// Removes and deletes the first node in the linked list that has data
// equal to the key
void remove(const T& key) {
ListNode<T>* nodeToDelete = find(key);
ListNode<T>* previousNode = findPreviousNode(key);
ListNode<T>* nextNode = nodeToDelete->next();
delete nodeToDelete;
previousNode->setNext(nextNode);
}
私は広範囲に私のfind(const T& key)
機能をテストして、それはので、私は、私は、コードを歩くしかしとき、問題は私のfindPreviousNode機能であると信じて動作しますそれは正常に動作するようです。
私は、previousNodeは常に最後にチェックされた要素を持ち、一致するものが見つかった場合、更新されていないpreviousNodeを返すので、まだ一致するノードの直前にノードが含まれていますが、正しいと私はなぜわからない。
LinkedList.h http://pastebin.com/b4miZBzA
:私は、コードを実行すると、私はセグメンテーションフォールト(コアダンプ)
エラーメッセージここで
を取得することは、全体のコードといくつかのpastebinsです
main.cpp(テスト関数を呼び出すメソッド)http://pastebin.com/0QGtUhjC
参考になることがあります:http://stackoverflow.com/questions/12914917/using-pointers-to-remove-item-from-singly-linked-list – user4581301