输入两个链表,找出他们的第一个公共结点:
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; }