打印两个链表的公共元素出错
Error in printing common elements of two linked lists
我正在尝试打印两个链表中的共同元素,但我的函数只打印第一个元素(如果它是共同的)
void common()
{
//head和head1分别是第一个和第二个链表的头指针
node1 *ptr=head;
node2 *ptr2=head1;
while(ptr!=NULL||ptr2!=NULL)
{
while(ptr!=NULL&&ptr2!=NULL)
{
if(ptr->info==ptr2->info)
{
printf("Common Elements are-%d\n",ptr2->info);
ptr2=ptr2->next;
}
}
ptr=ptr->next;
ptr2=head1;
}
}
您需要将 ptr2
节点的增量移出 if
条件。
ptr2->info
的值是否与ptr->info
的值匹配不是移动到下一个节点的决定条件 在 ptr2
中。所以,你必须无条件地移动到下一个节点。
类似
while(ptr!=NULL&&ptr2!=NULL)
{
if(ptr->info==ptr2->info)
{
printf("Common Elements are-%d\n",ptr2->info);
}
ptr2=ptr2->next; //move to next node unconditionally.
}
应该完成这项工作。
此外,正如 @Gopi 所建议的,您可以去掉代码中的冗余检查。 outer while
可以检查 ptr
的非 NULL 值,而 inner while
可以检查对于非 NULL ptr2
.
删除 ptr2=head1
行,使用此行,您每次都将 ptr2
重新分配给 head1
的第一个值。
所以每次比较相同的链表节点时。
检查下面的代码:
while(ptr!=NULL)
{
ptr2 = head1;
while(ptr2!=NULL)
{
if(ptr->info==ptr2->info)
{
printf("Common Elements are-%d\n",ptr2->info);
}
ptr2=ptr2->next;
}
ptr=ptr->next;
}
我正在尝试打印两个链表中的共同元素,但我的函数只打印第一个元素(如果它是共同的)
void common()
{
//head和head1分别是第一个和第二个链表的头指针
node1 *ptr=head;
node2 *ptr2=head1;
while(ptr!=NULL||ptr2!=NULL)
{
while(ptr!=NULL&&ptr2!=NULL)
{
if(ptr->info==ptr2->info)
{
printf("Common Elements are-%d\n",ptr2->info);
ptr2=ptr2->next;
}
}
ptr=ptr->next;
ptr2=head1;
}
}
您需要将 ptr2
节点的增量移出 if
条件。
ptr2->info
的值是否与ptr->info
的值匹配不是移动到下一个节点的决定条件 在 ptr2
中。所以,你必须无条件地移动到下一个节点。
类似
while(ptr!=NULL&&ptr2!=NULL)
{
if(ptr->info==ptr2->info)
{
printf("Common Elements are-%d\n",ptr2->info);
}
ptr2=ptr2->next; //move to next node unconditionally.
}
应该完成这项工作。
此外,正如 @Gopi 所建议的,您可以去掉代码中的冗余检查。 outer while
可以检查 ptr
的非 NULL 值,而 inner while
可以检查对于非 NULL ptr2
.
删除 ptr2=head1
行,使用此行,您每次都将 ptr2
重新分配给 head1
的第一个值。
所以每次比较相同的链表节点时。
检查下面的代码:
while(ptr!=NULL)
{
ptr2 = head1;
while(ptr2!=NULL)
{
if(ptr->info==ptr2->info)
{
printf("Common Elements are-%d\n",ptr2->info);
}
ptr2=ptr2->next;
}
ptr=ptr->next;
}