gpt4 book ai didi

c - 成功从链表中删除节点的代码还需要什么?

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:00 25 4
gpt4 key购买 nike

我想通过节点的索引号(序列号)从链表中删除给定节点。所以我在我的函数中尝试做的是,首先我接受了用户输入的索引号。然后我使用了两个节点类型指针tempcurrent。我开始使用 current 遍历列表,当节点的索引号与用户输入匹配时,我尝试删除该节点。到目前为止它是正确的。我面临删除逻辑的问题。这是我试过的代码:

void delete_node(struct node **start,int index_no)
{
int counter=0;
struct node *temp, *current;

temp=(struct node *)malloc(sizeof(struct node));
current=(struct node *)malloc(sizeof(struct node));
current=*start;

while(current->next!=NULL)
{
counter++;
if(counter==index_no)
{
temp= current->next;
free(current);
/*I guess some code is missing here. Help me finding the logic.*/
}
else
{
printf("\n The index number is invalid!!");
}
}
}

评论部分缺少删除逻辑。另外,我觉得这段代码在空间和时间上都不高效。如果是这样,请建议一种使它更紧凑的方法。

最佳答案

为什么要在删除函数中分配两个节点,然后泄漏它们的内存?看起来它们应该初始化为 start 或其后继者之一。

您还需要更新前一个元素中的 next 指针,如果删除的元素是第一个(即。 index_no == 1).

您还有一个差一错误,其中最终节点永远无法删除,因为只有具有 ->next 指针的节点才会被考虑删除。

推荐阅读:A Tutorial on Pointers and Arrays in C .

关于c - 成功从链表中删除节点的代码还需要什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18749274/

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