如何在链接列表中获取两套公共元素?
我有两个链接列表,我想比较两个列表并打印出现在这两个列表中的每个常见元素。试过一切都无法让它工作。如何在链接列表中获取两套公共元素?
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;
}
你接近,在现实中你的方法应该是这样的:
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大多数情况下,我不相当肯定如果这就是你想要的。
这不是一个正确的解决方案,因为两个指针同时前进。它只比较元素。它没有像[1,2,3],[2,1,3] – vascop 2012-03-22 00:20:16
之类的东西,我看到你编辑了你的答案。我指出的错误不再适用。还应该注意的是重复的值必须使用这种方法打印。 – vascop 2012-03-22 00:21:46
谢谢现在工作,回报是支持返回共同价值。如果这两个集合有更多的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,你也应该遍历第二列表,并将它与第一个。
谢谢你,没有意识到那个错误。 – UnknownUser 2012-03-22 00:19:11
这功课吗?如果是这样,请标记为这样。 – 2012-03-22 00:05:00
这不是作业,试图教自己的算法和数据结构。 – UnknownUser 2012-03-22 00:11:09
当比较一个集合中的_every_项目时,另一个集合中的_every_项目必须有**两个循环**(某处),而不是一个。所以它至少有一半。 – gbulmer 2012-03-22 00:13:08