gpt4 book ai didi

c - 采访 : deleting a node in linked list

转载 作者:行者123 更新时间:2023-12-04 05:34:37 26 4
gpt4 key购买 nike

节点删除的这种实现是否有效,还是我失败了?

void remove_node(node *p)
{
node **i = &node_list;

for (;(*i) != NULL && ((*i) != p); *i = ((*i)->next)) ;

if (*i != NULL)
{
(*i) = (*i)->next;
}

if (p != NULL)
{
free(p);
}
}

顺便说一句,据我所知,在我看到的每个从列表中删除节点的算法中,
有一个变量应该保留前一个指针。这个实现缺少这个......

最佳答案

假设 parameter p as pArg for循环后:-

for (;(*i) != NULL && ((*i) != p); *i = ((*i)->next)) ;

*i=pArg [if node pArg exists in linked list](case 1) or *i=NULL(case 2)



之后如果:-
 if (*i != NULL) 
{
(*i) = (*i)->next;
}

p=pArg->next (case 1) and no operation in (case 2)



第二个如果:-
if (p != NULL) 
{
free(p);
}

free(pArg->next);(case 1) ; and no operation in (case 2)(if pArg really is a node in the LL)



您删除了 pArg 和 指向的节点不是 pArg 本身。

做一点改变:-
node *prevp=NULL;

for (;(*i) != NULL && ((*i) != p); *i = ((*i)->next))
{prevp=*i;}

if (*i != NULL)
{
prevp->next = (*i)->next;
}

关于c - 采访 : deleting a node in linked list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12121141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com