c-如何用一个指针从链表中删除一个节点



我研究的#include这本书是一个练习,要求我们修改以下代码,该代码从链表中删除一个节点,并构建另一个只需一个指针即可完成任务的函数:

struct node {
int value;
struct node * next;
};
struct node delete_from_list( struct node * list , int n){
struct node *cur, *prev;
for (cur = list, prev = NULL;
cur != NULL && cur -> value != n;
prev = cur, cur -> next)
;
if(cur == NULL)
return list;
else if(prev == NULL)
list = list -> next;
else
prev -> next = cur -> next;
free(cur);
return list;
}

我在网上看到的一些代码是:

struct node *delete_from_list(struct node **list, int n) {
struct node *entry = *list;
while (entry) {
if (entry->value == n) {
*list = entry->next;
free(entry);
break;
}
list = &entry->next;
entry = entry->next;
}
return *list;
}

但我对此有两个反对意见:

  1. 此代码实际上包含两个指针entrylist

  2. 我们正在free()使用entry,但继续使用它,这"感觉"像是一个错误。

如果你愿意帮忙,请解释我的反对意见或写一个新代码。谢谢

  1. 此代码实际上包含两个指针entrylist

您需要构建一个使用单个指针的算法。在您的情况下,虽然看起来像两个,但entry算法使用的一个指针,而list实际上是包含算法的函数的输入。

  1. 我们正在free()处理条目,但继续使用它,这"感觉"像是一个错误

释放后,代码不使用entry。释放后,由于break语句在调用free后立即中断循环。

相关内容

  • 没有找到相关文章

最新更新