题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805057860517888
题意:给定链表L1->L2->...->Ln,要求按Ln->L1->Ln-1->L2->...的格式输出。
思路:水模拟,按照要求做就行了,定义结构体数组模拟内存,每个结点的下标即其地址,结点包括data,nxt(指向下一个元素),lst(指向上一个元素),输入数据之后,循环一遍求出每个结点在链表中的上一个结点的地址,存在lst中,然后用frt,bk分别指向当前链表的头部和尾部,输出即可。但是这样我wa了一个点,检查好久也没检查除有什么错误,上网看了才发现题目有个坑点:输入的结点不一定在链表上。我...对这种坑真的很无奈,个人觉得这样的坑意义不大,程序设计比赛的侧重应该放在算法上,放在思想上,而不是玩这种文字游戏。吐槽完还得继续刷题,吐吐就行了,也不用一直上纲上线,改变不了它就改变自己吧。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 struct node{ 5 int dat,nxt,lst; 6 }a[100005]; 7 8 int n,frt,bk,t1,t2,t3; 9 10 int main(){ 11 scanf("%d%d",&frt,&n); 12 for(int i=0;i<n;++i){ 13 scanf("%d%d%d",&t1,&t2,&t3); 14 a[t1].dat=t2,a[t1].nxt=t3; 15 if(t3==-1) bk=t1; 16 } 17 a[frt].lst=-1; 18 int f=frt; 19 while(f!=-1){ 20 a[a[f].nxt].lst=f; 21 f=a[f].nxt; 22 } 23 while(frt!=bk){ 24 printf("%05d %d %05d ",bk,a[bk].dat,frt); 25 bk=a[bk].lst; 26 if(frt==bk) break; 27 printf("%05d %d %05d ",frt,a[frt].dat,bk); 28 frt=a[frt].nxt; 29 } 30 printf("%05d %d -1 ",frt,a[frt].dat); 31 frt=a[frt].nxt; 32 return 0; 33 }