Data Structure Linked List: Write a function to get the intersection point of two Linked Lists.

http://www.geeksforgeeks.org/write-a-function-to-get-the-intersection-point-of-two-linked-lists/

第一第二个方法比较简单,下面这段代码是第三个方法

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 #include <queue>
 5 #include <stack>
 6 #include <string>
 7 #include <fstream>
 8 #include <map>
 9 #include <set>
10 using namespace std;
11 
12 struct node {
13     int data;
14     node *next;
15     node() : data(0), next(NULL) { }
16     node(int d) : data(d), next(NULL) { }
17 };
18 
19 void push(node* &head, int k) {
20     node *new_node = new node(k);
21     new_node->next = head;
22     head = new_node;
23 }
24 
25 void print(node* head) {
26     while (head) {
27         cout << head->data << " ";
28         head = head->next;
29     }
30     cout << endl;
31 }
32 
33 int getintersect(node *first, node *second) {
34     int c1 = 0;
35     int c2 = 0;
36     node *p = first;
37     while (p) {
38         c1++;
39         p = p->next;
40     }
41     p = second;
42     while (p) {
43         c2++;
44         p = p->next;
45     }
46     if (c1 < c2) {
47         swap(c1, c2);
48         swap(first, second);
49     }
50     while (c1 != c2) {
51         c1--;
52         first = first->next;
53     }
54     while (first != second) {
55         first = first->next;
56         second = second->next;
57     }
58     return second->data;
59 }
60 
61 int main() {
62     node *head = new node(3);
63     head->next = new node(6);
64     head->next->next = new node(9);
65     head->next->next->next = new node(15);
66     head->next->next->next->next = new node(30);
67     node *second = new node(10);
68     second->next = head->next->next->next;
69     cout << getintersect(head, second);
70     return 0;
71 }

 第四第五个方法不太容易想到

原文地址:https://www.cnblogs.com/yingzhongwen/p/3655711.html