#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<stdlib.h>
#define MAX_N 100100
#define MAX_K 10100
using namespace std;
struct Node{
int address;
int data;
int next;
int order;
}node[MAX_N];
bool visited[MAX_K];
int n;
int head;
bool cmp(struct Node a,struct Node b){
return a.order<b.order;
}
void init(){
for(int i=0;i<MAX_N;i++){
node[i].order=2*MAX_N;
}
}
int main(){
int address;
init();
scanf("%d%d",&head,&n);
for(int i=0;i<n;i++){
scanf("%d",&address);
scanf("%d%d",&node[address].data,&node[address].next);
node[address].address=address;
}
int validnum=0,removednum=0;
for(int p=head;p!=-1;p=node[p].next){
if(!visited[abs(node[p].data)]){
visited[abs(node[p].data)]=true;
node[p].order=validnum++;
}
else{
node[p].order=MAX_N+removednum++;
}
}
sort(node,node+MAX_N,cmp);
int validnode=validnum+removednum;
for(int i=0;i<validnode;i++){
if(i!=validnum-1&&i!=validnode-1){
printf("%05d %d %05d\n",node[i].address,node[i].data,node[i+1].address);
}
else{
printf("%05d %d -1\n",node[i].address,node[i].data);
}
}
}
1097. Deduplication on a Linked List (25) PAT甲级
最新推荐文章于 2024-11-09 19:34:05 发布
本文介绍了一个使用C语言实现的链表程序,该程序通过输入一系列带有地址、数据和下一个节点地址的链表节点,并根据特定规则对这些节点进行排序。首先初始化链表结构并读取节点数据,然后根据数据的有效性和顺序重新排列节点,最后输出排序后的链表。涉及C语言的数据结构操作及排序算法应用。
1605

被折叠的 条评论
为什么被折叠?



