我有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;
}
答案 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,但我不确定这是否是你想要的。