• l2-22(重排链表)


    题目链接: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 }
  • 相关阅读:
    SPOJ913 Query on a tree II
    SPOJ375 Query on a tree
    HDU4348 To the moon
    Bzoj2753 [SCOI2012]滑雪与时间胶囊
    HDU4612 Warm up
    Uva11374 Airport Express
    Uva1624 Knots
    DevExpress的GridControl的使用以及怎样添加列和绑定数据源
    C#中使用Path、Directory、Split、Substring实现对文件路径和文件名的常用操作实例
    ZedGraph的曲线的LineItem对象的Tag属性存储信息进而在鼠标悬浮时进行显示
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/10574739.html
Copyright © 2020-2023  润新知