我正在尝试在两个链接列表中打印常用元素,但我的功能是只打印第一个元素(如果它是常见的)
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;
}
}
答案 0 :(得分:0)
您需要将ptr2
节点的增量移出if
条件。
ptr2->info
的值是否与ptr->info
的值匹配 移动到{{1}中的下一个节点的决定条件}。所以,你必须无条件地转移到下一个节点。
像
这样的东西ptr2
应该做的。
另外,正如 @Gopi 所示,您可以摆脱代码中的冗余检查。 外部 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.
}
可以检查while
的非空值,而内部 ptr
可以检查not-NULL {{ 1}}。
答案 1 :(得分:0)
删除ptr2=head1
行,使用此行,您每次都会再次将ptr2
重新分配给head1
的第一个值。
所以每次比较相同的链表节点。
答案 2 :(得分:0)
检查以下代码:
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;
}