首先遍历headA,将所有节点的地址存放在set中,然后遍历headB,遍历过程中,如果发现当前节点的地址在set中,返回这个地址。如果一直没有遍历到,返回null。
/** * 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) { set<ListNode*> s; set<int>::iterator iter; ListNode *p=headA,*q=headB; while(p!=NULL){ s.insert(p); p=p->next; } while(q!=NULL){ if( s.find(q) != s.end() ){ return q; } q=q->next; } return NULL; } };执行用时 : 148 ms, 在Intersection of Two Linked Lists的C++提交中击败了8.79% 的用户 内存消耗 : 20.2 MB, 在Intersection of Two Linked Lists的C++提交中击败了5.09% 的用户
