剑指Offer 两个链表的第一个公共结点
题目描述
输入两个链表,找出它们的第一个公共结点。
思路:
题目说的很笼统,应该是有2个链表,找出公共点,第一个公共点后面的链表是共同所有的。可以用map做,直接检测map里有没有出现这个节点。
思路2:
统计2个链表的长度,i,j,长的链表先走|i-j|步,再一起走,如果有公共点,他们必然有共同的尾节点,判断相等的节点就是第一个出现的节点。
AC代码:
1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution { 10 public: 11 ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) { 12 map<ListNode *,int> pmap; 13 ListNode *p=pHead1; 14 while(p!=NULL) 15 { 16 pmap[p]=1; 17 p=p->next; 18 } 19 p=pHead2; 20 while(p!=NULL) 21 { 22 if(pmap[p]) 23 return p; 24 p=p->next; 25 } 26 return NULL; 27 } 28 };