pat 链表专题(2)做题总结

mac2024-10-10  52

这是今天做的第二题添加链接描述 题目就不列出来了 题目大意: 给你一些节点 让你把有效节点的key从小到大排序输出 然后 每个节点的next都是后面节点的address 不难 sort里面cmp函数写一下就行 问题是 第五个测试点我没过 因为我没有注意到这个count的问题,就是这个有效节点的问题 有效节点的个数很关键。因为不全是有效的,所以结构体里面有个inlist 也因为可能一个有效节点都没有 即一开始告诉你什么是有效节点 然后在剩下的数据中连有效节点的key next都没给你 则这个时候特判0 -1 (不过我在想这 也太内个了吧 给个头节点结果里面一个数据都没有 连头节点自己都不给 那我真的无语) 这种极限边界情况 真的感觉好好适应一下 代码:

#include<stdio.h> #include<iostream> #include<algorithm> #include<vector> using namespace std; struct Node { bool islist=false; int key=-100001; int next=-1; int address=-1; } node[100010]; bool cmp(Node a,Node b) { if(a.islist!=b.islist) return a.islist>b.islist; else return a.key<b.key; } int main() { int nums=0,head,address; scanf("%d %d",&nums,&head); while(nums--) { scanf("%d",&address); scanf("%d%d",&node[address].key,&node[address].next); node[address].address=address; } int count=0; for(int cur=head; cur!=-1; cur=node[cur].next) { count++; node[cur].islist=true; } sort(node,node+100010,cmp); if(count!=0) printf("%d %05d\n",count,node[0].address); else { printf("0 -1\n"); } for(int i=0; i<count; i++) { node[i].next=node[i+1].address; } for(int i=0; i<count; i++) { printf("%05d %d ",node[i].address,node[i].key); if(node[i].next>0) { printf("%05d\n",node[i].next); } else { printf("-1\n"); } } }
最新回复(0)