先遍历两个链表,求得它们的长度,n, m, 长度长得链表先走 |n-m| 步,再同时走,没走一步都看指针是否相等,相等则为首次相交得点,跳出循环。
参考链接
List* find first(List* l1, List*l2)
{
int len1 = 0, len2 = 0;
List* p = l1;
while( p )
{
p = p->next;
len1 ++;
}
p = l2;
while( p )
{
p = p->next;
len1 ++;
}
List* p1 = l1;
List* p2 = l2;
int k = 0;
if(len1 > len2)
{
while(k < len1 - len2)
{
p1 = p1->next;
k ++;
}
}
else if(len1 < len2)
{
while(k < len1 - len2)
{
p1 = p1->next;
k ++;
}
}
while(p1)
{
if(p1 == p2)
return p1;
p1 = p1->next;
p2 = p2->next;
}
return NULL;
}