链表删除已有节点void linklist_dellinklist headint n linklist pos; forpos=head;pos!=NULL;pos=pos-next ifpos-next-data==nbreak; ifpos-next==NULLreturn; linklist p=
上述代码的不妥之处在于以下几点:
-
在找到要删除的节点后,没有判断pos->next是否为空。如果要删除的节点是最后一个节点,pos->next将为NULL,此时直接调用pos->next->data会导致空指针错误。
-
在删除节点后,没有释放被删除节点的内存空间。这样会导致内存泄漏。
-
删除节点时,使用了双等号"=="而不是赋值符号"=",导致将NULL赋值给p->next,而不是将p->next置为NULL。
修正后的代码如下:
void linklist_del(linklist *head, int n)
{
linklist *pos;
for (pos = head; pos != NULL; pos = pos->next)
{
if (pos->next != NULL && pos->next->data == n)
{
linklist *p = pos->next;
pos->next = p->next;
free(p);
break;
}
}
}
``
原文地址: https://www.cveoy.top/t/topic/izVM 著作权归作者所有。请勿转载和采集!