zoukankan      html  css  js  c++  java
  • GPLT天梯赛 L2-022. 重排链表

    L2-022. 重排链表

    时间限制
    500 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    陈越

    给定一个单链表 L1→L2→...→Ln-1→Ln,请编写程序将链表重新排列为 Ln→L1→Ln-1→L2→...。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。

    输入格式:

    每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (<= 105)。结点的地址是5位非负整数,NULL地址用-1表示。

    接下来有N行,每行格式为:

    Address Data Next

    其中Address是结点地址;Data是该结点保存的数据,为不超过105的正整数;Next是下一结点的地址。题目保证给出的链表上至少有两个结点。

    输出格式:

    对每个测试用例,顺序输出重排后的结果链表,其上每个结点占一行,格式与输入相同。

    输入样例:
    00100 6
    00000 4 99999
    00100 1 12309
    68237 6 -1
    33218 3 00000
    99999 5 68237
    12309 2 33218
    
    输出样例:
    68237 6 00100
    00100 1 99999
    99999 5 12309
    12309 2 00000
    00000 4 33218
    33218 3 -1
    

    不会链表的渣渣,各种STL... 模拟

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<string>
    #include<map>
    #include<vector>
    #include<deque>
    #include<algorithm>
    #define MAX 100005
    using namespace std;
    
    struct rec{
        char add[10];
        int dat;
        char nex[10];
    }rec[MAX];
    struct Node{
        char add[10];
        int dat;
    }node;
    vector<Node> v[MAX];
    deque<Node> q;
    int main()
    {
        int t,n,i;
        char add[10];
        map<string,int> mpadd;
        map<string,int> mpdat;
        scanf(" %s %d",add,&n);
        t=0;
        for(i=1;i<=n;i++){
            scanf(" %s %d %s",rec[i].add,&rec[i].dat,rec[i].nex);
            if(!mpadd[rec[i].add]) mpadd[rec[i].add]=++t;
            if(!mpdat[rec[i].add]) mpdat[rec[i].add]=rec[i].dat;
            if(!mpadd[rec[i].nex]) mpadd[rec[i].nex]=++t;
        }
        for(i=1;i<=n;i++){
            strcpy(node.add,rec[i].nex);
            node.dat=mpdat[rec[i].nex];
            v[mpadd[rec[i].add]].push_back(node);
        }
        while(strcmp(add,"-1")!=0){
            strcpy(node.add,add);
            node.dat=mpdat[add];
            q.push_back(node);
            strcpy(add,v[mpadd[add]][0].add);
        }
        int c=0;
        while(q.size()){
            c++;
            if(c==1){
                printf("%s %d",q.back().add,q.back().dat);
                q.pop_back();
            }
            else if(c&1){
                printf(" %s
    %s %d",q.back().add,q.back().add,q.back().dat);
                q.pop_back();
            }
            else{
                printf(" %s
    %s %d",q.front().add,q.front().add,q.front().dat);
                q.pop_front();
            }
        }
        printf(" -1
    ");
        return 0;
    }
  • 相关阅读:
    sql知识
    铁道部新客票系统设计(三)
    PYTHON压平嵌套列表
    快速升级App支持iOS6及iPhone5的4寸屏幕
    TreeListView
    杭州ADC技术嘉年华两日总结SOA,去C
    .NET(C#): Task.Unwrap扩展方法和async Lambda
    关于分布式系统的数据一致性问题
    wcf 随笔1
    Linux进程基础
  • 原文地址:https://www.cnblogs.com/yzm10/p/8552494.html
Copyright © 2011-2022 走看看