gpt4 book ai didi

c - 删除链表中具有特定值的所有节点

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

标题很容易理解。这是我为此目的编写的函数:

void wipeLoneCells()
{
cell *tmp;

tail = head;
while (1)
{
if (head == tail && !tail->flag)
{
head = head->next;
free(tail);
tail = head;
continue;
}

tmp = tail->next;

/***/ if (tmp->next == NULL && !tmp->flag)
{
tail->next = NULL;
free(tmp);
break;
}
else if (!tmp->flag)
{
tail->next = tmp->next;
free(tmp);
continue;
}

tail = tail->next;
}
}

列表的头部和尾部是全局的,列表是在调用此函数时构建的,头部指向第一个节点,尾部指向最后一个节点(其下一个为 NULL)。我几乎可以肯定我的链接列表构建正确,因为我可以毫无错误地打印它们。有时这个函数工作得很好,有时它会在标有星号的行导致访问冲突。我知道这并不是完全错误的,因为当它没有产生错误时我确实得到了我想要的结果,尽管我确实经常收到错误所以一定有一些我忽略的东西。提前感谢您的帮助。

编辑:这是固定代码:

void wipeLoneCells()
{
cell *tmp;

tail = head;
while (1)
{
if (head == tail && !tail->flag)
{
head = head->next;
free(tail);
tail = head;
continue;
}

tmp = tail->next;

if (tmp->next == NULL && !tmp->flag)
{
tail->next = NULL;
free(tmp);
break;
}
else if (tmp->next == NULL)
{
tail = tmp;
break;
}
else if (!tmp->flag)
{
tail->next = tmp->next;
free(tmp);
continue;
}

tail = tail->next;
}
}

最佳答案

如果

tmp = tail->next; 

NULL 吗?下一行尝试取消引用 NULL 指针,这会导致未定义的行为 - 可能导致崩溃。

您应该检查这种情况并采取适当的措施。

关于c - 删除链表中具有特定值的所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8615912/

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