gpt4 book ai didi

c - 删除给定列表开头的线性单链表中的节点

转载 作者:行者123 更新时间:2023-11-30 21:04:01 25 4
gpt4 key购买 nike

我有以下代码,它从线性单链表中删除给定的节点。我想知道我们是否还能改进这个程序以及它是否随时会崩溃

   struct node
{
int num;
struct node *next;
} ;


typedef struct node s;

void delete(struct node *first)
{
int flag = 0;
s *ptr, *lastNodePtr = NULL, *deleteNode;
deleteNode = (s*) malloc(sizeof(s));
printf("enter the node value to delete");
scanf_s("%d",&deleteNode->num);
deleteNode->next = NULL;

for (ptr=first;ptr!=NULL;ptr=ptr->next) //at least one element exist
{
if(deleteNode->num == ptr->num)
{
flag=1;
if(ptr==first) //need to delete at first place
{
free(ptr);
first = null; //i dont think we need to do this as it points to ptr and ptr is already null.
}
else // need to delete some where middle.it can be last as well.
{
lastNodePtr->next=ptr->next;
free(ptr);
}

printf("successfully deleted..");
break;
}

lastNodePtr=ptr; // taking note of last node visited..
}

if (flag==0)
{
printf("\n Couldn't find the node");
return;
}
}

最佳答案

如果 ptr 是列表中要删除的第一个元素,则将第一个元素设置为 null,而不是 ptr 的下一个元素。 (副作用:您无法释放列表的其余部分)

你的EDITH:delete应该返回新的Head,最好将其设为结构节点**第一个参数,如果第一个元素是被删除的元素,则它会更改第一个元素

顺便说一句:永远不要转换 malloc 的结果。

顺便说一句,两个。为什么要使用for循环?每个人都使用带有链表的 while 循环

顺便说一句三:链表的正常变量名称是“head”,“list”,“next”,“prev”,“last”,具有很好的副作用,它们的长度都相同,因此使其整齐对齐。

关于c - 删除给定列表开头的线性单链表中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18683820/

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