HappyLeetcode42:Intersection of Two Linked Lists

Write a program to find the node at which the intersection of two singly linked lists begins.

For example, the following two linked lists:

A:          a1 → a2

                   ↘

                     c1 → c2 → c3

                   ↗            

B:     b1 → b2 → b3

begin to intersect at node c1.

Notes:

  • If the two linked lists have no intersection at all, return null.
  • The linked lists must retain their original structure after the function returns.
  • You may assume there are no cycles anywhere in the entire linked structure.
  • Your code should preferably run in O(n) time and use only O(1) memory.

Credits:
Special thanks to @stellari for adding this problem and creating all test cases.

 

这道题除了阅读题目的困难较大之外, 其他的都还好。非常好做的一道题目。

代码如下:

//* Definition for singly-linked list.

 struct ListNode {

     int val;

     ListNode *next;

     ListNode(int x) : val(x), next(NULL) {}

 };



class Solution {

public:

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

        if (headA == NULL || headB == NULL)

            return NULL;

        int lengtha=1, lengthb=1;

        ListNode *cora = headA, *corb = headB;

        while (cora->next != NULL)

        {

            cora = cora->next;

            lengtha++;

        }

        while (corb->next != NULL)

        {

            corb = corb->next;

            lengthb++;

        }

        if (cora->val != corb->val)

            return NULL;

        int dif = lengtha - lengthb;

        cora = headA, corb = headB;

        if (dif >= 0)

        {

            while (dif)

            {

                dif--;

                cora = cora->next;

            }

        }

        else

        {

            while (dif)

            {

                dif++;

                corb = corb->next;

            }

        }



        while (cora != NULL)

        {

            if (cora == corb)

                return cora;

            else

            {

                cora = cora->next;

                corb = corb->next;

            }

        }

    }

};

你可能感兴趣的:(intersect)