1097 Deduplication on a Linked List (25 分)

水~,依旧是喜闻乐见的链表题。

题意

给出N个结点的地址address、数据域data以及指针域next,然后给出链表的首地址,要求去除链表上权值的绝对值相同的结点(只保留第-一个),之后把未删除的结点按链表连接顺序输出,接着把被删除的结点也按在原链表中的顺序输出。

const int N=1e5+10;
struct Node
{
    int addr;
    int data;
    int nxt;
}a[N];
bool vis[10010];
int head,n;

void print(vector<Node> &res)
{
    for(int i=0;i<res.size();i++)
    if(i == res.size()-1)
        printf("%05d %d -1
",res[i].addr,res[i].data);
    else
        printf("%05d %d %05d
",res[i].addr,res[i].data,res[i+1].addr);
}

int main()
{
    cin>>head>>n;

    for(int i=0;i<n;i++)
    {
        int addr,data,nxt;
        cin>>addr>>data>>nxt;
        a[addr]={addr,data,nxt};
    }

    vector<Node> res1,res2;
    int p=head;
    while(p != -1)
    {
        if(!vis[abs(a[p].data)]) res1.pb(a[p]);
        else res2.pb(a[p]);
        vis[abs(a[p].data)]=true;
        p=a[p].nxt;
    }

    print(res1);
    print(res2);
    //system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/fxh0707/p/14481907.html