gpt4 book ai didi

c - 将项目添加到链接列表,不允许重复

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

我必须将项目添加到链表中,不允许任何重复项:

列表

typedef struct node
{
double info;
struct node *next;
} NODE;

我的功能:

   void addToEnd(NODE **lista, double info)
{
NODE *novi = (NODE *) malloc(sizeof(NODE));
novi->info = info;
novi->next = NULL;

if (*lista == NULL)
*lista = novi;
else
{
NODE *tmp = *lista;
while (tmp->next)
{
if(tmp->info == info)
{free(new); return;}
tmp = tmp->next;
}
tmp->next = novi;
}
}

如果数字不只是彼此相邻,它确实有效,例如添加 5.5 1.0 5.5 工作正常,但 5.5 5.5 1.0 添加两个 5.5,这是双舍入错误还是代码逻辑有缺陷?

最佳答案

  • 在确定确实需要内存之前不要分配
  • 避免特殊情况。目标是找到链中的第一个(也是唯一一个)NULL 指针。这可以是 *lista(如果列表恰好为空),或者一些 ->next 指针。

void addToEnd(NODE **lista, double info)
{
NODE *new ;

for ( ; *lista; lista = &(*lista)->next) {
if((*lista)->info == info) return;
}
new = malloc(sizeof *new );
new->info = info;
new->next = NULL;
*lista = new;
}

或者,甚至更紧凑(您不需要 new 指针,因为您可以使用 ->next 指针):

void addToEnd(NODE **lista, double info)
{
for ( ; *lista; lista = &(*lista)->next) {
if((*lista)->info == info) return;
}
*lista = malloc(sizeof **lista);
(*lista)->info = info;
(*lista)->next = NULL;
}

关于c - 将项目添加到链接列表,不允许重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36824013/

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