zoukankan      html  css  js  c++  java
  • PAT 1032. Sharing

    其实就是链表求交:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <unordered_map>
     5 
     6 using namespace std;
     7 
     8 class Node {
     9 public:
    10     Node() : data(0), next(0) {}
    11     char data;
    12     int next;
    13 };
    14 
    15 void print_list(unordered_map<int, Node*>& mem, int head) {
    16     int cur = head;
    17     while (cur != -1) {
    18         cout<<mem[cur]->data<<" ";
    19         cur = mem[cur]->next;
    20     }
    21     cout<<endl;
    22 };
    23 
    24 int step_list(unordered_map<int, Node*>& mem, int from, int n) {
    25     if (n < 0) return -1;
    26     int cur = from;
    27     while (cur != -1) {
    28         if (n == 0) {
    29             break;
    30         }
    31         cur = mem[cur]->next;
    32         n--;
    33     }
    34     return cur;
    35 }
    36 
    37 int count_list(unordered_map<int, Node*>& mem, int from) {
    38     if (from < 0) return 0;
    39     int cur =  from;
    40     int cnt = 0;
    41     while (cur != -1) {
    42         cur = mem[cur]->next;
    43         cnt++;
    44     }
    45     return cnt;
    46 }
    47 
    48 int main() {
    49     int head_a, head_b;
    50     int n;
    51     
    52     unordered_map<int, Node*> mem;
    53     
    54     cin>>head_a>>head_b>>n;
    55     
    56     for (int i=0; i<n; i++) {
    57         int addr;
    58         Node* np = new Node();
    59         scanf("%d %c %d", &addr, &(np->data), &(np->next));
    60         mem.insert(make_pair(addr, np));
    61     }
    62 
    63     int cnt_a = count_list(mem, head_a);
    64     int cnt_b = count_list(mem, head_b);
    65     
    66     int cnt_diff = cnt_a - cnt_b;
    67     int head_long  = head_a;
    68     int head_short = head_b;
    69     if (cnt_diff < 0) {
    70         cnt_diff = -cnt_diff;
    71         head_long = head_b;
    72         head_short= head_a;
    73     }
    74     
    75     head_long = step_list(mem, head_long, cnt_diff);
    76     
    77     while (head_long != head_short) {
    78         head_long = mem[head_long]->next;
    79         head_short= mem[head_short]->next;
    80     }
    81     if (head_long < 0) {
    82         printf("-1
    ");
    83     } else {
    84         printf("%05d
    ", head_long);
    85     }
    86     system("pause");
    87     return 0;
    88 }
  • 相关阅读:
    Golang调用windows下的dll动态库中的函数
    Golang 编译成 DLL 文件
    go 通过nginx代理后获取用户ip
    idea教程--Maven 骨架介绍
    idea教程--快速插入依赖
    Java开发名词解释
    Android Studio安装
    Java基础--Eclipse关联Java源码
    【排序基础】3、随机生成排序算法 测试用例
    【排序基础】2、使用模板(泛型)编写选择排序算法
  • 原文地址:https://www.cnblogs.com/lailailai/p/4312155.html
Copyright © 2011-2022 走看看