zoukankan      html  css  js  c++  java
  • 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 }

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

  • 相关阅读:
    A
    E
    C
    A
    exgcd
    博客
    简单数论
    extended_gcd(扩展欧几里德算法) 青蛙的约会
    扩展欧几里德算法—求解不定方程,线性同余方程
    素数筛 E
  • 原文地址:https://www.cnblogs.com/yingzhongwen/p/3655711.html
Copyright © 2011-2022 走看看