输入两个链表,找出他们的第一个公共结点:
struct ListNode
{
int value;
struct ListNode *next;
};
unsigned int GetListLength(ListNode *pHead)
{
ListNode *pNode = pHead;
unsigned int length = 0;
while (pNode != NULL)
{
length++;
pNode = pNode->next;
}
return length;
}
ListNode *FindFirstCommonNode(ListNode *pHead1, ListNode *pHead2)
{
unsigned int nLength1 = GetListLength(pHead1);
unsigned int nLength2 = GetListLength(pHead2);
int nLengthDif = nLength1 - nLength2;
ListNode *pListHeadLong = pHead1;
ListNode *pListHeadShort = pHead2;
if (nLengthDif < 0)
{
pListHeadLong = pHead2;
pListHeadShort = pHead1;
nLengthDif = -nLengthDif;
}
for (unsigned int i = 0; i < nLengthDif; i++)
{
pListHeadLong = pListHeadLong->next;
}
while ((pListHeadLong != NULL) && (pListHeadShort != NULL) && (pListHeadShort != pListHeadLong))
{
pListHeadLong = pListHeadLong->next;
pListHeadShort = pListHeadShort->next;
}
ListNode *pFirstCommon = pListHeadLong;
return pFirstCommon;
}