PAT(甲级)渡劫(八)-Deduplication on a Linked List(25)
代码如下:
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
struct node{
int address;
int data;
int next;
} node[ 100001 ] ;
struct node * aqueue[ 100001 ] , * bqueue[ 100001 ] ;
int arear, afront, brear, bfront;
int key[ 100001 ] ;
int main ( ) {
int head, n;
scanf ( "%d %d" , & head, & n) ;
while ( n-- ) {
int a, d, nt;
scanf ( "%d %d %d" , & a, & d, & nt) ;
node[ a] . address = a;
node[ a] . data = d;
node[ a] . next = nt;
}
int x = head;
while ( x != - 1 ) {
if ( ! key[ abs ( node[ x] . data) ] ) {
aqueue[ arear++ ] = & node[ x] ;
key[ abs ( node[ x] . data) ] = 1 ;
} else {
bqueue[ brear++ ] = & node[ x] ;
}
x = node[ x] . next;
}
while ( afront < arear) {
if ( afront != arear- 1 ) {
printf ( "%05d %d %05d\n" , aqueue[ afront] -> address, aqueue[ afront] -> data, aqueue[ afront+ 1 ] -> address) ;
} else {
printf ( "%05d %d -1\n" , aqueue[ afront] -> address, aqueue[ afront] -> data) ;
}
++ afront;
}
while ( bfront < brear) {
if ( bfront != brear- 1 ) {
printf ( "%05d %d %05d\n" , bqueue[ bfront] -> address, bqueue[ bfront] -> data, bqueue[ bfront+ 1 ] -> address) ;
} else {
printf ( "%05d %d -1\n" , bqueue[ bfront] -> address, bqueue[ bfront] -> data) ;
}
++ bfront;
}
return 0 ;
}
运行结果: