我正在尝试在两个链接列表中打印常见元素,但是我的功能是仅打印第一个元素(如果它很常见)

  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的非空值。

10-04 11:07