两个链表的第一个公共节点
方法1:通过集合的方式
先遍历一个链表,并把节点全都放进一个集合(注意是节点,不是节点元素),然后遍历第二个链表,并且在集合中找有没有这个元素,如果有,就返回这个节点(该节点就是两个链表哦的第一个公共节点)
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { unordered_set<ListNode*> s; ListNode* p1=pHead1; ListNode* p2=pHead2; while(p1!=NULL) { s.insert(p1); p1=p1->next; } //unordered_set<ListNode*>::iterator pos; while(p2!=NULL) { if(s.find(p2)!=s.end()) return p2; p2=p2->next; } return NULL; } };
方法2:
分别遍历两个链表并且记录两个链表的长度,然后让长的那个先走差值步数,然后两个一起走,相遇的地方就是第一个公共节点
代码没有编出来