07. 链表相交
rt :给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null
。
solution: 计算两个链表长度,有交集那么两个链表后半段相等,那么长的减去长的部分,同事遍历
class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { int lenA = 0; int lenB = 0; ListNode* curA = headA; ListNode* curB = headB; for(ListNode* cur = headA; cur != NULL; cur = cur->next) ++lenA; for(ListNode* cur = headB; cur != NULL; cur = cur->next) ++lenB; if (lenA > lenB) { int diff = lenA - lenB; while (diff--) { curA = curA->next; } } else { int diff = lenB - lenA; while (diff--) { curB = curB->next; } } while (curA != NULL && curB != NULL && curA != curB) { curA = curA->next; curB = curB->next; } return curA; } };