zoukankan      html  css  js  c++  java
  • L2-2. 链表去重

    L2-2. 链表去重

    时间限制
    300 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    陈越
    给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值有重复的结点。即对任意键值K,只有键值或其绝对值等于K的第一个结点可以被保留。同时,所有被删除的结点必须被保存在另外一个链表中。例如:另L为21→-15→-15→-7→15,则你必须输出去重后的链表21→-15→-7、以及被删除的链表-15→15。

    输入格式:

    输入第一行包含链表第一个结点的地址、以及结点个数N(<= 105 的正整数)。结点地址是一个非负的5位整数,NULL指针用-1表示。

    随后N行,每行按下列格式给出一个结点的信息:

    Address Key Next

    其中Address是结点的地址,Key是绝对值不超过104的整数,Next是下一个结点的地址。

    输出格式:

    首先输出去重后的链表,然后输出被删除结点组成的链表。每个结点占一行,按输入的格式输出。

    输入样例:
    00100 5
    99999 -7 87654
    23854 -15 00000
    87654 15 -1
    00000 -15 99999
    00100 21 23854
    输出样例:
    00100 21 23854
    23854 -15 99999
    99999 -7 -1
    00000 -15 87654
    87654 15 -1

    做过的一道练习题,做着做着感觉这种去重的思路可以借鉴到别的去重上面去,就决定记录一下

     1 #include<iostream>
     2 #include<math.h>
     3 #include<iomanip>
     4 using namespace std;
     5 struct Node{
     6     int value;
     7     int next;
     8 };
     9 Node m[100001];            //这四个全部放在main函数里会栈溢出,索性全部设为全局变量
    10 int x[100001];                 //遍历到值的绝对值没重复的,把地址号放到x数组里,重复了的放到y数组里,这样只需要遍历一次即可
    11 int y[100001];
    12 bool isVisited[100001] = { 0 };      //判断值的绝对值有没有重复
    13 int main(){
    14     int N;
    15     int start;
    16     cin >> start >> N;
    17     for (int i = 0; i < N; i++){
    18         int adress, value, next;
    19         cin >> adress >> value >> next;
    20         m[adress].value = value;
    21         m[adress].next = next;
    22     }
    23 
    24     int indexX = 0;
    25     int indexY = 0;
    26     for (int j = start; j != -1; j = m[j].next){
    27         if (!isVisited[abs(m[j].value)]){
    28             x[indexX++] = j;
    29             isVisited[abs(m[j].value)] = true;
    30         }
    31         else{
    32             y[indexY++] = j;
    33         }
    34     }
    35     for (int i = 0; i < indexX; i++){
    36         if (i<indexX-1)
    37             cout << setw(5) << setfill('0') << x[i] << " " << m[x[i]].value << " " << x[i + 1] << endl;
    38         else
    39             cout << setw(5) << setfill('0') << x[i] << " " << m[x[i]].value << " " << -1 << endl;
    40     }
    41     for (int j = 0; j < indexY; j++){
    42         if (j<indexY - 1)
    43             cout << setw(5) << setfill('0') << y[j] << " " << m[y[j]].value << " " << y[j + 1] << endl;
    44         else
    45             cout << setw(5) << setfill('0') << y[j] << " " << m[y[j]].value << " " << -1 << endl;
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    Thinkphp 模板中使用自定义函数的方法
    thinkphp 邮件发送
    str_replace使用
    SQL备份一张表的数据
    error: Allowed memory size
    LitJson使用
    implode,explode的使用
    ModelState.AddModelError使用
    HTTP 错误 404.2
    验证码显示不出来,在THINKPHP中的使用
  • 原文地址:https://www.cnblogs.com/zhouxiaosong/p/5551593.html
Copyright © 2011-2022 走看看