我感觉好像我并没有实际删除节点并释放内存。我想我只是移动指针,所以当我打印链表时,列表不会打印出我删除的元素。所以我的问题是我实际上是删除节点还是我只是简单地重新安排指针,所以它看起来像我删除节点(本质上只是打破链接,但不删除节点)?感谢您的任何帮助。如何正确删除C++中链接列表的节点
void SLL::deleteNode(int target){
Node *current = new Node;
Node *previous = new Node;
for (current = front->next, previous = front; current != NULL; current = current->next, previous=previous->next){
if (previous->data == target && previous == front){
front = previous->next;
delete[] previous;
return;
//This if statement deletes the element if its the front
}
else {
if (previous->data == target && previous->next == NULL){
previous = NULL;
delete[] current;
return;
//This if statement deletes the node if it is the back
}
else if (current->data==target)
{
previous->next = current->next;
delete[] current;
return;
//This if statement deletes a node if it is in the middle
}
}
}
delete[] current;
delete[] previous;
}
当你将'current'和'previous'声明为单个实例时,为什么要使用数组delete?('delete []')版本? – mathematician1975
用'front-> next'开始你的枚举算法是关键的。 *请*告诉我们您没有使用实际不包含数据的预分配“头”节点。这不是必需的。除非你用'new Node [n]'分配你的节点,否则你使用错误的'delete'操作符。 – WhozCraig
我不知道。我试过这个工作。请回答这个问题。 – WombatCombat