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 }

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

你可能感兴趣的:(intersect)