* struct ListNode {
* int val;
* struct ListNode *next;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
*
* @param pHead1 ListNode类
* @param pHead2 ListNode类
* @return ListNode类
*/
struct ListNode* FindFirstCommonNode(struct ListNode* pHead1, struct ListNode* pHead2 ) {
// write code here
struct ListNode* p0;
struct ListNode* p1;
struct ListNode* p2;
struct ListNode* p3;
p0 = pHead1;
p1 = pHead2;
p2 = pHead1;
p3 = pHead2;
if( p0==NULL || p1==NULL)
{
return NULL;
}
// if(p0 == p1)
// {
// return p0;
// }
while(p0->next!=NULL)
{
p0 = p0->next; //找到链表1最右边的节点
}
while(p1->next!=NULL)
{
p1 = p1->next; //找到链表2最右边的节点
}
while(p0 == p1)
{
p2 = pHead1;
p3 = pHead2;
while(p2->next!=p0)
{
p2 = p2->next; //找p0前面的一个节点
}
while(p3->next!=p1)
{
p3 = p3->next; //找p1前面的一个节点
}
if(p2 == p3)
{
p0 = p2;
p1 = p3;
if(p3==pHead2||p2==pHead1)
{
return p0;
}
}
else
{
return p0;
}
}
return NULL;
}