LeetCode: Intersection of Two Linked Lists

来源:互联网 发布:中国原创服装品牌 知乎 编辑:程序博客网 时间:2024/05/17 07:09

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.

/** * 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) {        int l1 = 0, l2 = 0;        ListNode *n1 = headA, *n2 = headB;        while(n1 != NULL)        {            n1 = n1->next;            l1++;        }        while(n2 != NULL)        {            n2 = n2->next;            l2++;        }        int abs = std::abs(l1-l2);        n1 = l1 > l2 ? headA: headB;        n2 = l1 > l2 ? headB: headA;        while(abs > 0)        {            n1 = n1->next;            abs--;        }        while(n1 != NULL && n2 != NULL)        {            if(n1 == n2)                return n1;            else            {                n1 = n1->next;                n2 = n2->next;            }        }        return NULL;    }};


Round 3:

class Solution {public:    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if(headA == NULL || headB == NULL)return NULL;        ListNode *pA = headA;ListNode *pB = headB;int count = 0;while(count <= 2){if(pA == NULL){pA = headB;count++;}if(pB == NULL){pB = headA;count++;}if(pA == pB){return pA;}pA = pA->next;pB = pB->next;}return NULL;    }};


0 0
原创粉丝点击