剑指Offer——两个链表的第一个公共结点
题目描述:
输入两个链表,找出它们的第一个公共结点。
分析:
设置两个指针,分别从两个链表的头部开始往后遍历。
谁遍历完自己本身的,就从另一个链表开始遍历,这样大家到达第一个公共结点的时候便会相遇。
因为它们都走了它们没有公共部分的长度之和加上一个公共部分的长度。
代码:
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 ListNode* p1 = pHead1; 13 ListNode* p2 = pHead2; 14 while(!(p1 == p2)) { 15 p1 = (p1 == NULL ? pHead2 : p1->next); 16 p2 = (p2 == NULL ? pHead1 : p2->next); 17 } 18 return p1; 19 } 20 };