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

    给定一个单链表 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


    #include<iostream>
    #include<set>
    #include<map>>
    #include<algorithm>
    #include<cstring>
    using namespace std;

    int main(){
    map<int,int>a,b,c;
    int fir,n;
    cin>>fir>>n;
    int last;
    int flag = 1;
    for(int i =0;i<n;i++){
    int adr,num,next;
    cin>>adr>>num>>next;
    a[adr]=next;
    b[adr]=num;
    c[next]=adr;
    }
    last = c[-1];
    if(n%2==0)
    flag=0;

    while(fir!=c[last]&&fir!=last) {
    printf("%05d %d %05d ",last,b[last],fir);
    printf("%05d %d %05d ",fir,b[fir],c[last]);
    last = c[last];
    fir = a[fir];

    }
    if(fir==c[last]){
    printf("%05d %d %05d ",last,b[last],fir);
    printf("%05d %d -1 ",fir,b[fir]);

    }
    if(fir==last){
    printf("%05d %d -1 ",fir,b[fir]);

    }

    return 0;
    }



  • 相关阅读:
    BigDecimal中的8中舍入模式详解
    使用二倍均值法完成红包算法
    使用Calendar类和它的子类GregorianCalendar类实现构建动态日历
    『MelodyHub』书写是对思维的缓存
    本站已接入音乐播放器API
    【LeetCode】35. 搜索插入位置
    配置NodeJs环境变量
    利用GitHub博客连接多仓库
    hexo 大型车祸现场
    随机图片API
  • 原文地址:https://www.cnblogs.com/cyj1258/p/8563263.html
Copyright © 2011-2022 走看看