[leetcode]Intersection of Two Linked Lists

老题了。

class Solution {

public:

    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {

        ListNode *tailA = headA;

        ListNode *tailB = headB;

        int lengthA = getLength(headA, tailA);

        int lengthB = getLength(headB, tailB);

        if (tailA != tailB || tailA == NULL) {

            return NULL;

        }

        ListNode *nodeA = headA;

        ListNode *nodeB = headB;

        int diff = abs(lengthA - lengthB);

        while (diff--) {

            if (lengthA > lengthB) {

                nodeA = nodeA->next;    

            } else {

                nodeB = nodeB->next;

            }

        }

        while (nodeA != nodeB) {

            nodeA = nodeA->next;

            nodeB = nodeB->next;

        }

        return nodeA;

    }

    

    int getLength(ListNode *head, ListNode *&tail) {

        if (head == NULL) {

            tail = NULL;

            return 0;

        }

        int length = 1;

        ListNode *node = head;

        while (node->next != NULL) {

            node = node->next;

            length++;

        }

        tail = node;

        return length;

    }

};

  

你可能感兴趣的:(intersect)