zoukankan      html  css  js  c++  java
  • L2-002. 链表去重(map结构体,精彩的代码)

    链表去重

    时间限制
    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

    #include<bits/stdc++.h>
    #define eps 1e-6
    #define INF 0x3f3f3f3f
    #define PI acos(-1.0)
    #define LL long long
    #define MAX 205
    using namespace std;
    struct node
    {
        int add,key,next;
        node(int _add=0,int _key=0,int _next=0)
        {
            add=_add;
            key=_key;
            next=_next;
        }
    };
    
    
    int main()
    {
        int n,m;
        int i,j,k;
        int root;
        int a,b;
        map<int,node>M;
        map<int,int>vis;
        scanf("%d%d",&root,&n);
        for(i=0;i<n;i++)
        {
            scanf("%d %d %d",&a,&k,&b);
            M[a]=node(a,k,b);
        }  
        while(root!=-1)
        {
            k=abs(M[root].key);
            if(vis[k]==0)
            {
                vis[k]=1;
                Q1.push(root);
            }
            else
            {
                Q2.push(root);
            }
            root=M[root].next;
        }
        int p1,p2;
        p1=Q1.front();
        Q1.pop();
        while(!Q1.empty())
        {
            p2=Q1.front();
            Q1.pop();
            printf("%05d %d %05d
    ",M[p1].add,M[p1].key,M[p2].add);
            p1=p2;
        }
        printf("%05d %d -1
    ",M[p1].add,M[p1].key);
        if(!Q2.empty())
        {
            p1=Q2.front();
            Q2.pop();
            while(!Q2.empty())
            {
                p2=Q2.front();
                Q2.pop();
                printf("%05d %d %05d
    ",M[p1].add,M[p1].key,M[p2].add);
                p1=p2;
            }
            printf("%05d %d -1
    ",M[p1].add,M[p1].key);
        }
        return 0;
    }
  • 相关阅读:
    URL模块之parse方法
    结合GET(),POST()实现一个简单、完整的服务器
    Node.js初探之实现能向前台返回东西的简单服务器
    float和position
    回归博客园·共享onload事件
    百度地图api的用法
    美丽数列
    低位值
    删括号
    牛牛找工作
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/8643450.html
Copyright © 2011-2022 走看看