数据结构 | 链表:1097 删除重复元素

代码提交之后一直说段错误。我以为是数组开的不够大,但是随着数组一点一点开大,还是有一个case没有AC。最终我发现:是有个边界条件没有考虑到

void printList(const vector<Node>& a){
    if(!a.size()) return;
    FF(i,a.size()-1){
        printf("%05d %d %05d
",a[i].i,a[i].d,a[i+1].i);
    }
    printf("%05d %d %d
",a[i].i,a[i].d,-1);
}

错误原因:没有加上加粗的那行代码。

AC代码:

#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map>


#define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 1000000
#define MAX 0x06FFFFFF
#define V vector<int>

using namespace std;

typedef struct Node{
    int d,next,i;
}Node;
Node nd[LEN];
set<int> Has;

void printList(const vector<Node>& a){
    if(!a.size()) return;
    FF(i,a.size()-1){
        printf("%05d %d %05d
",a[i].i,a[i].d,a[i+1].i);
    }
    printf("%05d %d %d
",a[i].i,a[i].d,-1);
}

int main(){
//    freopen("1097.txt","r",stdin);
    int f,n,add,num,next;
    int i,j;
    I("%d%d",&f,&n);
    FF(i,n){
        I("%d",&add);
        I("%d%d",&num,&next);
        nd[add].i=add;
        nd[add].d=num;
        nd[add].next=next;
    }
    vector<Node> a;
    vector<Node> b;
    i=f;
    while(i>=0){
        int t=abs(nd[i].d);
        if(Has.find(t)==Has.end()){
            a.push_back(nd[i]);
            Has.insert(t);
        }else b.push_back(nd[i]);
        i=nd[i].next;
//        O("%d
",i);
    }
    printList(a);
    printList(b);
    return 0;
}
原文地址:https://www.cnblogs.com/TQCAI/p/8546007.html