- /**********************************************************************
- * 寻找连个链表中第一个相同的节点
- * 思路:先求出两个链表的长度差diff,再将指向较长的链表的指针移动diff
- * 个节点,然后两个链表同时移动,并判断,若指针相同,则找到,否则,任何
- * 一个链表移动到链尾,则没有共同的节点。
- **********************************************************************/
- Node* FirstCommonNode(Link &l1, Link &l2)
- {
- int len1 = l1.Lengh();
- int len2 = l2.Lengh();
- Node *longLink = l1.head;
- Node *shortLink = l2.head;
- if (len1 < len2)
- {
- longLink = l2.head;
- shortLink = l1.head;
- }
- int diff = abs(len1 - len2);
- //将长链表移动到第diff个节点
- for (int i = 0; i < diff; i++)
- {
- longLink = longLink->next;
- }
- //同时移动两个链表
- while (longLink != NULL && shortLink != NULL)
- {
- if (longLink == shortLink)
- {
- break;
- }
- longLink = longLink->next;
- shortLink = shortLink->next;
- }
- if (NULL == longLink || NULL == shortLink)
- {
- return NULL;
- }
- else
- {
- return longLink;
- }
- }