zoukankan      html  css  js  c++  java
  • L2002 链表去重 (25 分)

    L2-002 链表去重 (25 分)

    给定一个带整数键值的链表 \(L\),你需要把其中绝对值重复的键值结点删掉。即对每个键值 \(K\),只有第一个绝对值等于 \(K\) 的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定 \(L\)\(21→-15→-15→-7→15\),你需要输出去重后的链表 \(21→-15→-7\),还有被删除的链表 \(-15→15\)

    输入格式:

    输入在第一行给出 \(L\) 的第一个结点的地址和一个正整数 \(N \; (\leq 10^{5},为结点总数)\)。一个结点的地址是非负的 \(5\) 位整数,空地址 \(NULL\)\(−1\) 来表示。
    随后 \(N\) 行,每行按以下格式描述一个结点:

    地址 键值 下一个结点
    

    其中地址是该结点的地址,键值是绝对值不超过 \(10^{4}\) 的整数,下一个结点是下个结点的地址。

    输出格式:

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

    输入样例:

    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>
    using namespace std;
    #define maxn 100005
    int s,n,x,ans1[maxn],ans2[maxn],cnt1,cnt2;
    bool vis[maxn];
    struct L{int pre,now,val,nxt;}lst[maxn];
    int main()
    {
        cin>>s>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>x;
            cin>>lst[x].val>>lst[x].nxt;
        }
        for(int i=s;i!=-1;i=lst[i].nxt)
        {
            if(vis[abs(lst[i].val)])ans2[++cnt2]=i;
            else
            {
                vis[abs(lst[i].val)]=1;
                ans1[++cnt1]=i;
            }
        }
        for(int i=1;i<=cnt1;i++)
        {
            cout<<setw(5)<<setfill('0')<<ans1[i]<<' '<<lst[ans1[i]].val<<' ';
            if(i<cnt1)cout<<setw(5)<<setfill('0')<<ans1[i+1]<<endl;
            else cout<<-1<<endl;
        }
        for(int i=1;i<=cnt2;i++)
        {
            cout<<setw(5)<<setfill('0')<<ans2[i]<<' '<<lst[ans2[i]].val<<' ';
            if(i<cnt2)cout<<setw(5)<<setfill('0')<<ans2[i+1]<<endl;
            else cout<<-1<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    usaco dec 2012 first!
    uva 1449
    unity3D学习笔记之DOTween插件的学习(持续更新)
    中南林业科技大学第十一届程序设计大赛 G 0和5
    中南林业科技大学第十一届程序设计大赛 D 最大的湖
    最小生成树之克鲁斯卡尔(Kruskal)算法
    最小生成树Prim算法理解
    判断无向图是否联通模板(并查集版)(DFS),BFS等其他方法将陆续更新
    矩阵压缩学习笔记
    C/C++ assert()函数用法总结
  • 原文地址:https://www.cnblogs.com/LengYun/p/14687723.html
Copyright © 2011-2022 走看看