剑指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 };

 

 
 
 
posted @ 2016-08-24 16:11  SeeKHit  阅读(149)  评论(0编辑  收藏  举报