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(( 函数存储的所有数据,所以我认为问题在于我找到重复项的逻辑。 谢谢
你错过了代码中的一个关键行(或者更确切地说,把它放在错误的地方(。
循环访问内部循环后,再也不会重置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
的重置移到了内部循环之前,因为在内部循环之前准备东西而不是之后重置它们是有意义的。