打印两个链接列表的常用元素时出错

时间:2015-03-26 11:13:35

标签: c data-structures linked-list

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

  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;


     }
  }

3 个答案:

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