![](/img/trans.png)
[英]linked list : how to delete last node, where we have pointer to last node in a single linked list
[英]How can I delete an node from a linked list with a single pointer?
我研究的这本书#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;
}
但我对此有两个反对意见:
这段代码实际上包含两个指针entry
和list
。
我们是free()
输入entry
但继续使用它“感觉”像一个错误。
请,如果您愿意提供帮助,请解释我的反对意见或编写新代码。 谢谢。
- 这段代码实际上包含两个指针
entry
和list
。
您需要构建一个使用单个指针的算法。 在您的情况下,尽管看起来像两个,但entry
是算法使用的一个指针,除了list
之外,它实际上是包含 algorithm的函数的输入。
- 我们是
free()
输入条目,但继续使用它“感觉”像一个错误。
该代码在释放它后不使用entry
。 一旦释放,循环立即中断,因为break
语句在调用free
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.