求两个单向链表的交点

代码

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;
	}
}
点赞