gpt4 book ai didi

c - 删除链表的第一个节点

转载 作者:行者123 更新时间:2023-11-30 20:40:59 25 4
gpt4 key购买 nike

我必须使用链表(因此是指针)在c 中打印集合的列表。但是,当我删除列表的第一个元素并尝试打印列表时,它只是在彼此下方显示很多地址。对于可能出现的问题有什么建议吗?谢谢!

删除功能:

 int delete(set_element* src, int elem){
if (src==NULL) {
fputs("The list is empty.\n", stderr);
}


set_element* currElement;
set_element* prevElement=NULL;

for (currElement=src; currElement!=NULL; prevElement=currElement, currElement=currElement->next) {
if(currElement->value==elem) {
if(prevElement==NULL){
printf("Head is deleted\n");
if(currElement->next!=NULL){
*src = *currElement->next;
} else {

destroy(currElement);
}
} else {
prevElement->next = currElement->next;
}
// free(currElement);
break;
}
}



return 1;
}



void print(set_element* start)
{
set_element *pt = start;

while(pt != NULL)
{
printf("%d, ",pt->value);
pt = pt->next;
}
}

最佳答案

如果列表指针与指向第一个元素的指针相同,那么当您释放第一个元素时,列表指针不再有效。

此问题有两种解决方案:

  1. 让所有列表方法都采用指向列表的指针,以便它们可以在需要时更新它。这种方法的问题在于,如果您在另一个变量中有指针的副本,那么该指针也会失效。

  2. 不要让列表指针指向第一个元素。让它指向第一个元素的指针。

示例代码:'

typedef struct node_struct {
node_struct *next;
void *data;
} Node;


typedef struct {
Node *first;
} List;

关于c - 删除链表的第一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19492093/

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