開始:這是作業問題的一部分,所以請隨時提示答案或指向正確的方向而不是直接回答。C++獲得單節點鏈表中匹配節點的前一個節點
我建立在C++中的所要求的功能之一的單個鏈接表是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,因此它仍然包含直接位於匹配節點之前的節點,但是這顯然不是, t正確,我不知道爲什麼。當我運行的代碼,我收到了
分段錯誤(核心轉儲)
錯誤信息
這裏有一些pastebins與整個代碼:
LinkedList.h http://pastebin.com/b4miZBzA
main.cpp(調用測試函數的方法)http://pastebin.com/0QGtUhjC
可能會有幫助:http://stackoverflow.com/questions/12914917/using-pointers-to-remove-item-from-singly-linked-list – user4581301