zoukankan      html  css  js  c++  java
  • 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 #include <cstdio>
     2 #include <cstring>
     3 #include <cmath>
     4 #include <iostream>
     5 #include <algorithm>
     6 #include <string>
     7 #include <map>
     8 #include <vector>
     9 using namespace std;
    10 typedef long long ll;
    11 const int maxn = 1e5+10;
    12 const int inf = 0x3f3f3f3f;
    13 map<int,int>mp;//绝对值是否存在
    14 map<int,int>add;//地址 Key
    15 int pre[maxn];
    16 int nex[maxn];
    17 int nu[maxn];
    18 int main()
    19 {
    20     int bg,n;
    21     scanf("%d%d",&bg,&n);
    22     int a,b,c;
    23     pre[bg]=bg;
    24     for(int i=0;i<n;++i)
    25     {
    26         scanf("%d%d%d",&a,&b,&c);
    27         add[a]=b;
    28         nex[a]=c;
    29         pre[c]=a;
    30     }
    31     int p=bg;
    32     int len=0;
    33     while(p!=-1)
    34     {
    35         if(mp[ abs(add[p])] )
    36         {
    37             nex[pre[p]]=nex[p];
    38             pre[nex[p]]=pre[p];
    39             nu[len++]=p;
    40         }
    41         mp[ abs(add[p])] =1;
    42         p=nex[p];
    43     }
    44     while(bg!=-1)
    45     {
    46         if(nex[bg]!=-1)
    47             printf("%05d %d %05d
    ",bg,add[bg],nex[bg]);
    48         else
    49             printf("%05d %d -1
    ",bg,add[bg]);
    50         bg=nex[bg];
    51     }
    52     for(int i=0;i<len-1;++i)
    53         printf("%05d %d %05d
    ",nu[i],add[nu[i]],nu[i+1]);
    54     if(len>0)
    55         printf("%05d %d -1
    ",nu[len-1],add[nu[len-1]]);
    56     
    57     return 0;
    58 }
    View Code
  • 相关阅读:
    其实很简单——SpringIOC详解
    设计模式之原型模式与深拷贝、浅拷贝
    《Understanding the JVM》读书笔记之五——类加载器
    《Understanding the JVM》读书笔记之四——类加载机制
    《Understanding the JVM》读书笔记之三——垃圾收集器
    《Understanding the JVM》读书笔记之二——垃圾回收算法
    《Understanding the JVM》读书笔记之一——JVM内存模型
    开始实现功能(一)——用户模块,从注册登录开始
    网站后台搭建--springboot项目是如何创建的
    从网站功能入手创建数据库
  • 原文地址:https://www.cnblogs.com/zmin/p/8480413.html
Copyright © 2011-2022 走看看