代码
struct Node
{
int data;
struct Node * next;
};
Node* FixIntersetion(Node* pHead1, Node* pHead2)
{
Node* p1 = pHead1;
Node* p2 = pHead2;
int i = 1, j = 1, k = 0, diff = 0;
//如果都是空链表,肯定没有交点
if(pHead2 == NULL || pHead2 == NULL)
{
return NULL;
}
//获取链表长度
while(p1->next != NULL)
{
p1 = p1->next;
i++;
}
while(p2->next != NULL)
{
p2 = p2->next;
j++;
}
//开始判断是否存在交点
if(p1 != p2)
{//根据有交点时,两个链表在交点及其之后的部分是公共的,因此,有交点的单链表的尾节点必定相同
return NULL; //如果尾节点不同,直接返回NULL
}
else //否则寻找第一个相同的节点
{
p1=pHead1;
p2=pHead2;
//使得两者的起始比较位置离尾部的长度一致
if(i>j)
{
diff=i-j;
for(k=0; k<diff; k++)
{
p1 = p1->next;
}
}
if(i<j)
{
diff=j-i;
for(k=0; k<diff; k++)
{
p2 = p2->next;
}
}
//开始比对,得出交点
while(p1 != p2)
{
p1 = p1->next;
p2 = p2->next;
}
return p1;
}
}