我必须在不允许任何重复的情况下将项目添加到链接列表中:
列表
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,是双舍入错误还是代码逻辑有缺陷?
答案 0 :(得分:2)
*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;
}