打印两个链表的公共元素出错

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;
 }