void duplicates()
{
int count=0;
struct node *temp=(struct node*)malloc(sizeof(struct node));
temp=head;
struct node *temp1=(struct node*)malloc(sizeof(struct node));
temp1=head;
while(temp!=NULL)
{
while(temp1!=NULL)
{
if(strcmp(temp->FN,temp1->FN)==0)
{
count++;
}
temp1=temp1->next;
}
if(count>1)
{
printf("DUPLICATE FOUND: %s",temp->FN);
}
count=0;
temp=temp->next;
}
}
我试图从链接列表中找到重复项并且无法通过我的函数找到它,我已经检查过链接列表是否已将所有数据存储在print()函数中,所以我认为问题在于我找到重复的逻辑。 谢谢
答案 0 :(得分:2)
你错过了代码中的一条关键线(或者把它放在错误的位置)。
当您循环内循环时,永远不会重置temp1
以再次指向列表的开头。
void duplicates()
{
int count=0;
struct node *temp;
struct node *temp1;
temp=head;
while(temp!=NULL)
{
temp1=head;
count=0;
while(temp1!=NULL)
{
if(strcmp(temp->FN,temp1->FN)==0)
{
count++;
}
temp1=temp1->next;
}
if(count>1)
{
printf("DUPLICATE FOUND: %s",temp->FN);
}
temp=temp->next;
}
}
您不需要为temp
或temp1
分配内存,因为它们将指向为您的列表分配的内存。
我还将count=0
的重置移到内循环之前,因为在内循环之前准备事物而不是之后重置它们是有意义的。