我正在尝试在两个链接列表中打印常见元素,但是我的功能是仅打印第一个元素(如果它很常见)
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的建议,您可以摆脱代码中的多余检查。外部
while
可以检查ptr
的非空值,而内部while
可以检查ptr2
的非空值。