剑指OFFER 两个链表的第一个公共结点

剑指OFFER 两个链表的第一个公共结点

同步出发,如果首次发现已经被访问过的结点,那么这个结点就是第一个公共结点

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    map<ListNode*,int> m;
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        if(pHead1 == NULL || pHead2 == NULL)return NULL;
        
        
        ListNode* node1 = pHead1;
        ListNode* node2 = pHead2;
        
        while(node1 != NULL || node2 != NULL)
        {

            if(node1 != NULL)
            {
                if(m[node1] > 0)return node1;
                m[node1]++;
                node1 = node1->next;
            }
            
            if(node2 != NULL)
            {
                if(m[node2] > 0)return node2;
                m[node2]++;
                node2 = node2->next;
            }
            
        }
        return NULL;
    }
};
原文地址:https://www.cnblogs.com/virgildevil/p/12210096.html