数据结构 | 链表:1097 删除重复元素
代码提交之后一直说段错误。我以为是数组开的不够大,但是随着数组一点一点开大,还是有一个case没有AC。最终我发现:是有个边界条件没有考虑到
void printList(const vector<Node>& a){ if(!a.size()) return; FF(i,a.size()-1){ printf("%05d %d %05d\n",a[i].i,a[i].d,a[i+1].i); } printf("%05d %d %d\n",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\n",a[i].i,a[i].d,a[i+1].i); } printf("%05d %d %d\n",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\n",i); } printList(a); printList(b); return 0; }