如何在链接列表中获取两套公共元素?

问题描述:

我有两个链接列表,我想比较两个列表并打印出现在这两个列表中的每个常见元素。试过一切都无法让它工作。如何在链接列表中获取两套公共元素?

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; 

} 
+0

这功课吗?如果是这样,请标记为这样。 – 2012-03-22 00:05:00

+0

这不是作业,试图教自己的算法和数据结构。 – UnknownUser 2012-03-22 00:11:09

+0

当比较一个集合中的_every_项目时,另一个集合中的_every_项目必须有**两个循环**(某处),而不是一个。所以它至少有一半。 – gbulmer 2012-03-22 00:13:08

你接近,在现实中你的方法应该是这样的:

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大多数情况下,我不相当肯定如果这就是你想要的。

+0

这不是一个正确的解决方案,因为两个指针同时前进。它只比较元素。它没有像[1,2,3],[2,1,3] – vascop 2012-03-22 00:20:16

+0

之类的东西,我看到你编辑了你的答案。我指出的错误不再适用。还应该注意的是重复的值必须使用这种方法打印。 – vascop 2012-03-22 00:21:46

+0

谢谢现在工作,回报是支持返回共同价值。如果这两个集合有更多的1个公共元素,那么我是不是又写了一个while循环来检查第二个集合? – UnknownUser 2012-03-22 00:26:03

OK ..这看起来像功课..所以我会指出一些事情,是在上述

1)你检查(link2->值条件的代码很明显= = link2-> value)可能是一个错字。你可能意味着link2-> value == link1-> value。
2)你的每一个元素遍历列表1中而不是在列表2.所以,你只检查是否在清单2中的第一个元素在列表中找到1

我认为这是足以..现在.. :)

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

应该

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

正如指出的gbulmer,你也应该遍历第二列表,并将它与第一个。

+0

谢谢你,没有意识到那个错误。 – UnknownUser 2012-03-22 00:19:11