【发布时间】:2019-04-03 02:02:29
【问题描述】:
我正在尝试创建一个更像 C 链表的链表,但它不会永久删除节点。当我运行函数后打印出链表时,节点仍然存在。为什么我的删除节点函数实际上并没有删除节点?
bool removeFromList(int delID, node* &head){
node* temp = new node;
node* curr = head;
while(curr != NULL && curr->id != delID){
temp = curr;
curr = curr->next;
}
if(curr == NULL){
cout << delID << " was not in the has table." << endl;
return false;
}
else{
node* next = curr->next;
cout << "Node with id " << curr->id << " was deleted." << endl;
delete curr;
curr = NULL;
temp->next = next;
return true;
}
}
【问题讨论】:
-
为什么用
new node初始化temp?稍后,您正在为 temp 分配一个值,并且您正在丢失分配给 temp 的内存。 -
^^^ 简短版本:删除节点应该需要 no 新分配。相关,要正确执行此操作,遍历一个指向指针的指针,从它的值从
&head(这将起作用,因为`head 是对真实指针的引用)向下到要删除的节点,使此任务 更更干净。
标签: c++ struct linked-list