• L2-002. 链表去重---模拟


    https://www.patest.cn/contests/gplt/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

    分析:(模拟)
    00100-23854-00000-99999-87654-(-1)
    21 -15 -15 -7 15
    建立结点模型

    struct node{
    int value;
    int next;
    };

    首先建立完整链表,在根据调节分开。

    
    
    #include "cstdio"
    #include "map"
    #include "cmath"
    #include "vector"
    #include "iostream"
    using namespace std;
    struct node{
        int value;
        int next;
    };
    map<int,node> map1;///通过map记录各节点信息,可凭地址快速访问
    map<int,int> sta;///判断值是否重复
    vector<int> v1;///去重后的链表结点依次地址
    vector<int> v2;///被删除链表各节点的地址
    int main()
    {
        int address,n;
        while(~scanf("%d%d",&address,&n))
        {
            ///初始化数据
            node node_temp;
            int ad,value,next;
            for(int i=0;i<n;i++)
            {
                scanf("%d%d%d",&ad,&value,&next);
                node_temp.value=value;
                node_temp.next=next;
                map1[ad]=node_temp;
            }
            ///分成两组
            sta[abs(map1[address].value)]++;
            v1.push_back(address);
            while(1)
            {
               address=map1[address].next;
               if(address==-1)break;
               if(sta.find(abs(map1[address].value))==sta.end())
               {
                   sta[abs(map1[address].value)]++;
                   v1.push_back(address);
               }
               else
               {
                   v2.push_back(address);
               }
            }
            ///分别输出
            for(__typeof(v1.begin())it=v1.begin();it!=v1.end();it++){
                if(it+1==v1.end())
                    printf("%05d %d -1
    ",*it,map1[*it].value);
                else
                    printf("%05d %d %05d
    ",*it,map1[*it].value,*(it+1));
            }
            for(__typeof(v2.begin())it=v2.begin();it!=v2.end();it++){
                if(it+1==v2.end())
                    printf("%05d %d -1
    ",*it,map1[*it].value);
                else
                    printf("%05d %d %05d
    ",*it,map1[*it].value,*(it+1));
            }
        }
        return 0;
    }
    
    
    
     
  • 相关阅读:
    用户可以设置每页显示记录数的分页程序
    将分页程序写成函数
    对查询结果进行分页
    使用mysql_query()方法操纵数据库以及综合实例
    php访问数据库
    cookie记录用户的浏览商品的路径
    php中如何输出当前服务器的(中国)当前时间
    mysql 与 mysqli的区别
    Django框架 之 ORM中介模型
    Django框架 之 查询 Extra
  • 原文地址:https://www.cnblogs.com/kimsimple/p/6567227.html
Copyright © 2020-2023  润新知