输入两个链表,找出它们的第一个公共结点。如果没有公共节点,则输出NULL;
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
ListNode* FindFirstCommonNode(ListNode *pHead1, ListNode *pHead2) {
int len1 = 0, len2 = 0;
int sublen = 0;
ListNode* temp1 = pHead1;
ListNode* temp2 = pHead2;
if (pHead1 == NULL || pHead2 == NULL)
return NULL;
/* 求两个链表的长度 */
while (temp1)
{
len1++;
temp1 = temp1->next;
}
while (temp2)
{
len2++;
temp2 = temp2->next;
}
temp1 = pHead1;
temp2 = pHead2;
/* 判断两个链表哪个比较长 */
if (len1 > len2)
{
sublen = len1 - len2;
while (sublen--)
{
temp1 = temp1->next;
}
}
else if (len2 > len1)
{
sublen = len2 - len1;
while (sublen--)
{
temp2 = temp2->next;
}
}
/* 找公共节点 */
while (temp1 != NULL)
{
if (temp1 == temp2)
break;
temp1 = temp1->next;
temp2 = temp2->next;
}
return temp1;
}