如何在链表中获取两组的公共元素?

时间:2012-03-22 00:03:32

标签: c

我有2个链表,我想比较两个列表并打印两个列表中出现的每个常见元素。试过一切都无法让它发挥作用。

struct Node *calcIntersection(struct Node *headA, struct Node *headB)
{

 struct Node * link1 = headA;

 struct Node * link2 = headB;

 while(link1 != NULL)
 {

  if (link2->value == link2->value)
     {

      printf("%d", link1->value);

     }      

    link1 = link1 -> pNext;

 }

  return link1;

}

3 个答案:

答案 0 :(得分:0)

好的..这看起来像是作业..所以我会指出一些在上面的代码中非常明显的事情

1)您正在检查的条件(link2-> value == link2-> value)可能是一个错字。您可能认为link2-> value == link1->值 2)您正在迭代列表1中的每个元素但不在列表2中。因此,您只检查列表2中的第一个元素是否在列表1中找到。

我认为这已经足够......现在......:)

答案 1 :(得分:0)

if (link2->value == link2->value)

应该是

if (link1->value == link2->value)

正如gbulmer所指出的,你还应该遍历第二个列表并将其与第一个列表进行比较。

答案 2 :(得分:0)

你很接近,实际上你的方法应该是这样的:

struct Node *calcIntersection(struct Node *headA, struct Node *headB)
{
    struct Node *link1 = headA;

    while(link1 != NULL)
    {
        struct Node *link2 = headB;

        while (link2 != NULL)
        {
            if (link1->value == link2->value)
            {
              printf("%d", link1->value);
            }      

            link2 = link2->pNext;
        }

        link1 = link1->pNext;
    }

   return link1;
}

我不太确定你在那里返回什么,但在大多数情况下你将返回NULL,但我不确定这是否是你想要的。