zoukankan      html  css  js  c++  java
  • L2-2 重排链表 (25 分)

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

    输入格式:

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

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

    Address Data Next
    

    其中Address是结点地址;Data是该结点保存的数据,为不超过1的正整数;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

    不知道string的前导零怎么加上。。。还在思考。。。有大佬会吗

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<string>
     4 #include<map>
     5 #include<algorithm>
     6 #include <iostream>
     7 #include <iomanip>
     8 using namespace std;
     9 typedef long long ll;
    10 const int amn=1e5+5;
    11 
    12 struct book
    13 {
    14     int data;
    15     string add,next;
    16 } a[amn],b[amn];
    17 
    18 map<string,int> cnt;
    19 
    20 int main()
    21 {
    22     int n;char badd[10];
    23     cin>>badd>>n;
    24     for(int i=1; i<=n; i++)
    25     {
    26         cin>>a[i].add>>a[i].data>>a[i].next;
    27         cnt[a[i].add]=i;
    28     }
    29     int top=1;
    30 //    cout<<a[cnt[badd]].add;
    31     b[1].add=a[cnt[badd]].add;
    32     b[1].data=a[cnt[badd]].data;
    33     b[1].next=a[cnt[badd]].next;
    34     for(int i=1; i<n; i++)
    35     {
    36         if(cnt[b[top-1].next]==-1)continue;
    37         b[++top].add=a[cnt[b[top-1].next]].add;
    38         b[top].data=a[cnt[b[top-1].next]].data;
    39         b[top].next=a[cnt[b[top-1].next]].next;
    40     }
    41     //for(int i=1;i<=top;i++)cout<<b[i].data<<" ";
    42     for(int i=top,j=1;i>=j;i--,j++)
    43     {
    44         cout<<b[i].add<<" "<<b[i].data<<" "<<b[j].add<<endl;
    45         //i--,j++
    46         cout<<b[j].add<<" "<<b[j].data<<" "<<b[i-1].add<<endl;
    47     }
    48 }
  • 相关阅读:
    计算闰年
    三个数比较大小
    剪刀石头布编辑
    二进制转换,八进制,十六进制转换
    原来我学的还是不够。。。
    认知是一切的基础
    spark学习笔记-java调用spark简单demo
    spark学习笔记-RDD
    Sublime Text3时间戳查看转换插件开发
    Spring Boot + Freemarker多语言国际化的实现
  • 原文地址:https://www.cnblogs.com/Railgun000/p/10603411.html
Copyright © 2011-2022 走看看