Leetcode 160. Intersection of Two Linked Lists

文章作者:Tyan
博客:noahsnail.com  |  ****  |  简书

1. Description

Leetcode 160. Intersection of Two Linked Lists

2. Solution

  • Version 1
/**
 * 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) {
        unordered_map<ListNode*, ListNode*> m;
        ListNode* current = headA;
        while(current) {
            m[current] = current;
            current = current->next;
        }
        current = headB;
        while(current) {
            if(m.find(current) != m.end()) {
                return current;
            }
            current = current->next;
        }
        return nullptr;
    }
};
  • Version 2
/**
 * 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 || !headB) {
            return nullptr;
        }
        ListNode* pA = headA;
        ListNode* pB = headB;
        while(pA != pB) {
            pA = pA->next;
            pB = pB->next;
            if(!pA && pB) {
                pA = headB;
            }
            if(pA && !pB) {
                pB = headA;
            }
        }
        return pA?pA:nullptr;
    }
};

Reference

  1. https://leetcode.com/problems/intersection-of-two-linked-lists/description/