这是代码:
void deleteNodebyValue(struct Node *head, int data){
Node *cur = head;
Node *prevNode = head;
while(cur){
if(cur->data == data){
//cout << "if(cur->data == data)" << endl;
if(cur == head){
cout <<"if(cur == head)" << endl;
//head = cur->next;
return;
} else{
prevNode->next = cur->next;
}
delete cur;
return;
}
prevNode = cur;
cur = cur->next;
}
}
它适用于任何节点,但前端(第一个/头部)节点。 如果我尝试删除第一个节点,它会产生垃圾:(。
答案 0 :(得分:1)
您尝试修改函数中head
点的位置,问题是您通过值传递head
,这意味着指针已被复制并且在函数中只在本地修改副本。您需要通过引用传递head
指针:
void deleteNodebyValue(struct Node *&head, int data){...}
当然,在这种情况下你无法直接返回,你仍然需要实际删除节点。