·Ö±ð±éÀúÁ½¸öµ¥Á´±í£¬¼ÆËã³öËüÃǵij¤¶ÈMºÍN£¬¼ÙÉèM±ÈN´ó£¬Ôò³¤¶ÈMµÄÁ´±íÏÈǰ½øM-N£¬È»ºóÁ½¸öÁ´±íͬʱÒÔ²½³¤1ǰ½ø£¬Ç°½øµÄͬʱ±È½Ïµ±Ç°µÄÔªËØ£¬Èç¹ûÏàͬ£¬Ôò±ØÊǽ»µã¡£
public static Link GetIntersect(Link head1, Link head2)
{
Link curr1 = head1;
Link curr2 = head2;
int M = 0, N = 0;
//goto the end of the link1
while (curr1.Next != null)
{
curr1 = curr1.Next;
M++;
}
//goto the end of the link2
while (curr2.Next != null)
{
curr2 = curr2.Next;
N++;
}
//return to the begining of the link
curr1 = head1;
curr2 = head2;
if (M > N)
{
for (int i = 0; i < M ¨C N; i++)
curr1 = curr1.Next;
}
else if (M < N)
{
for (int i = 0; i < N ¨C M; i++)
curr2 = curr2.Next;
}
while (curr1.Next != null)
{
if (curr1 == curr2)
{
return curr1;
}
curr1 = curr1.Next;
curr2 = curr2.Next;
}
return null;
}