PAT1097 Deduplication on a Linked List

题目链接:

http://www.nowcoder.com/pat/5/problem/4321

题目大意:

要求找出一个线性表中的结点数据绝对值重复的结点,仅保留第一个,其余的按地址连接的顺序去除,并且连接成另一个线性表。

分析:

水题,用数组下标模拟地址。遍历去重时,利用set不能放重复元素的特性进行判断,如果不能插入结点数据,证明是重复的,模拟链表删除一个结点。

代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<set>
using namespace std;
struct Node
{
    int _val;
    int _nextAdr;
};
Node list[100005];
struct Mark
{
    int _curAdr;
    int _val;
    int _nextAdr;
};
Mark delNode[100005];
int main()
{
    int staAdr;
    int n;
    set<int> s;
    scanf("%d%d",&staAdr,&n);
    int adr;
    while (n--)
    {
        scanf("%d",&adr);
        scanf("%d%d",&list[adr]._val,&list[adr]._nextAdr);
    }
    int curAdr = staAdr;
    int val;
    int size;
    int preAdr = 0;
    int cnt = 0;
    while (curAdr != -1)
    {
        val = list[curAdr]._val;
        val = val > 0 ? val : -val;
        size = s.size();
        s.insert(val);
        if (size == s.size())
        {
            list[preAdr]._nextAdr = list[curAdr]._nextAdr;
            delNode[cnt]._curAdr = curAdr;
            delNode[cnt]._val = list[curAdr]._val;
            delNode[cnt]._nextAdr = -1;
            if (cnt > 0)
            {
                delNode[cnt - 1]._nextAdr = curAdr;
            }
            cnt++;
        }
        else
        {
            preAdr = curAdr;
        }
        curAdr = list[curAdr]._nextAdr;
    }
    curAdr = staAdr;
    while (list[curAdr]._nextAdr != -1)
    {
        printf("%05d %d %05d\n", curAdr, list[curAdr]._val, list[curAdr]._nextAdr);
        curAdr = list[curAdr]._nextAdr;
    }
    //curAdr = list[curAdr]._nextAdr;
    printf("%05d %d -1\n", curAdr, list[curAdr]._val);
    for (int i = 0; i < cnt; i++)
    {
        printf("%05d %d",delNode[i]._curAdr,delNode[i]._val);
        if (delNode[i]._nextAdr == -1)
        {
            printf(" -1\n");
        }
        else
        {
            printf(" %05d\n",delNode[i]._nextAdr);
        }
    }
    return 0;
}

你可能感兴趣的:(线性表,pat,1097)