我写了下面的代码来查找链接列表的交点。 有人可以复习一下,并告诉我是否有任何改进措施可以使它变得更好。
算法-:
如果在任何点p1满足p2,则p1 / p2是交点。
int getIntesectionNode(struct Node* head1, struct Node* head2)
{
struct Node *start1 = head1;
struct Node *start2 = head2;
bool endFound1 = false;
bool endFound2 = false;
if( start1 == NULL || start2 == NULL)
{
return -1;
}
while(1)
{
start1 = start1->next;
start2 = start2->next;
if( start1 != start2)
{
if( start1 == NULL)
{
if (endFound1)
{
printf("Intersection not found !");
break;
}
start1 = head2;
endFound1 = true;
}
if( start2 == NULL)
{
if (endFound2 )
{
printf("Intersection not found !");
break;
}
start2 = head1;
endFound2 = true;
}
}
else
{
printf("Intersection point found\n");
printf("%d",start1->data);
return start1->data;
}
}
return -1;
}
答案 0 :(得分:1)
我认为我听不懂,但是如果您按照我的想法做,我会使用第二个循环, 并检查所有LL-1中的LL-2。我还将检查平等的起点 在开始循环并转到下一个点之前,无需检查它,直到循环为止。