剑指offer 两个链表的第一个公共结点

题目:输入两个链表,找出它们的第一个公共结点。

思路:两个单链表从第一个公共节点后所有节点都会一样。可以暴力搜索,复杂度O(mn).可以从前往后,或者从后往前(利用栈)找到最后一个公共的节点。

 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         stack<ListNode*> a, b;
13         ListNode *p1 = pHead1, *p2 = pHead2, *last = NULL;
14         if (p1 == NULL || p2 == NULL) {
15             return NULL;
16         }
17         while (p1 != NULL) {
18             a.push(p1);
19             p1 = p1->next;
20         }
21         while (p2 != NULL) {
22             b.push(p2);
23             p2 = p2->next;
24         }
25         while (!a.empty() && !b.empty()) {
26             p1 = a.top();
27             a.pop();
28             p2 = b.top();
29             b.pop();
30             if (p1 == p2) {
31                 last = p1;
32             } else {
33                 break;
34             }
35         }
36         return last;
37     }
38 };
原文地址:https://www.cnblogs.com/qinduanyinghua/p/10480859.html