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

    L2-002. 链表去重

    一、心得

    二、题目及分析

    L2-002. 链表去重

    时间限制
    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 //L2-002. 链表去重
      2 /*
      3 输入得到的是乱序链表,排个顺序让它成为正常的序列
      4 然后开始输出链表,用集合set来辅助看是不是绝对之已经输出过,如果是,就放在删除链表所在的链 
      5 */
      6 
      7 #include <iostream>
      8 #include <algorithm> 
      9 #include <set>
     10 #include <cmath>//abs函数 
     11 using namespace std;
     12 
     13 string firstAdd;
     14 int n;
     15 struct node{
     16     string add;
     17     int value;
     18     string next;
     19     int sortNul;
     20     int vis;
     21 }a[10005],b[10005],d[10005]; 
     22 
     23 bool operator <(const node &p,const node &p1){
     24     return p.sortNul<p1.sortNul;
     25 }
     26 
     27 
     28 
     29 //读入数据 
     30 void readData(){
     31     cin>>firstAdd>>n;
     32     for(int i=1;i<=n;i++){
     33         cin>>a[i].add>>a[i].value>>a[i].next;
     34         a[i].sortNul=0;
     35         a[i].vis=0;
     36     }
     37 } 
     38 
     39 void printData(){
     40     for(int i=1;i<=n;i++){
     41         cout<<a[i].add<<" "<<a[i].value<<" "<<a[i].next<<" "<<a[i].sortNul<<endl;
     42     }
     43 }
     44 
     45 //让链表sortNum编号有序
     46 void findSortNum(){
     47     string next(firstAdd);
     48     for(int i=1;i<=n;i++){
     49         for(int j=1;j<=n;j++){
     50             if(!a[j].vis&&a[j].add==next){
     51                 a[j].sortNul=i;
     52                 a[j].vis=1;
     53                 next=a[j].next;
     54                 break;
     55             }
     56         }
     57     }
     58 } 
     59 
     60 //找到 去重链表b 和 删除链表 d 
     61 set<int> set1;
     62 int b1=0,d1=0;
     63 void findAns(){
     64     for(int i=1;i<=n;i++){
     65         if(!set1.count(abs(a[i].value))){
     66             set1.insert(abs(a[i].value));
     67             b[++b1]=a[i];
     68         } 
     69         else{
     70             d[++d1]=a[i];
     71         }
     72     }
     73     //修正链表
     74      for(int i=1;i<b1;i++){
     75          b[i].next=b[i+1].add;
     76      } 
     77      b[b1].next="-1";
     78      
     79      for(int i=1;i<d1;i++){
     80          d[i].next=d[i+1].add;
     81      } 
     82      d[d1].next="-1";
     83 }
     84 
     85 //输出去重链表和 删除链表 
     86 void printAns(){
     87     for(int i=1;i<=b1;i++){
     88         cout<<b[i].add<<" "<<b[i].value<<" "<<b[i].next<<endl;
     89     }
     90     for(int i=1;i<=d1;i++){
     91         cout<<d[i].add<<" "<<d[i].value<<" "<<d[i].next<<endl;
     92     }
     93 } 
     94 
     95 
     96 int main(){
     97     //freopen("in.txt","r",stdin);
     98     readData();
     99     findSortNum();
    100     sort(a+1,a+n+1);
    101     //printData();
    102     findAns();
    103     //cout<<"-----------------------------------------"<<endl; 
    104     printAns();
    105     return 0;
    106 } 
  • 相关阅读:
    Android 3.0 r1 API中文文档(108) —— ExpandableListAdapter
    Android 3.0 r1 API中文文档(113) ——SlidingDrawer
    Android 3.0 r1 API中文文档(105) —— ViewParent
    Android 中文 API (102)—— CursorAdapter
    Android开发者指南(4) —— Application Fundamentals
    Android开发者指南(1) —— Android Debug Bridge(adb)
    Android中文API(115)——AudioFormat
    Android中文API(116)——TableLayout
    Android开发者指南(3) —— Other Tools
    Android中文API (110) —— CursorTreeAdapter
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7212387.html
Copyright © 2011-2022 走看看