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
}
第四第五个方法不太容易想到
Data Structure Linked List: Write a function to get the intersection point of two Linked Lists.

