• PAT-乙级-1025. 反转链表 (25)


    1025. 反转链表 (25)

    时间限制
    300 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4;如果K为4,则输出应该为4→3→2→1→5→6,即最后不到K个元素不反转。

    输入格式:

    每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址、结点总个数正整数N(<= 105)、以及正整数K(<=N),即要求反转的子链结点的个数。结点的地址是5位非负整数,NULL地址用-1表示。

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

    Address Data Next

    其中Address是结点地址,Data是该结点保存的整数数据,Next是下一结点的地址。

    输出格式:

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

    输入样例:
    00100 6 4
    00000 4 99999
    00100 1 12309
    68237 6 -1
    33218 3 00000
    99999 5 68237
    12309 2 33218
    
    输出样例:
    00000 4 33218
    33218 3 12309
    12309 2 00100
    00100 1 99999
    99999 5 68237
    68237 6 -1
     1 #include<bits/stdc++.h> 
     2 using namespace std;
     3 #define MAX 100010
     4 
     5 struct node
     6 {
     7     int add;
     8     int data;
     9     int next;
    10 };
    11 
    12 int main() {
    13     vector<node> vin(MAX); //MAX是预先支付 可能存储方式不同 
    14     vector<node> vsort;
    15     vector<node> vout;
    16     int first,k,n;
    17     node temp;
    18     scanf("%d%d%d",&first,&n,&k);
    19     for(int i=0;i<n;i++)
    20     {
    21         
    22         scanf("%d%d%d",&temp.add,&temp.data,&temp.next);
    23         vin[temp.add]=temp;
    24     }
    25     //链表进行连接
    26     int next=first;
    27     while(next!=-1)
    28     {
    29         vsort.push_back(vin[next]);
    30         next=vin[next].next;
    31     }
    32     int len=vsort.size();
    33     int right=k-1;
    34     while(right<len)
    35     {
    36         for(int i=right;i>right-k;i--)
    37         {
    38            vout.push_back(vsort[i]);     
    39         }
    40         right+=k;        
    41     }
    42      right-=k;
    43      right++;
    44      for(int i=right;i<vsort.size();i++)
    45      {
    46          vout.push_back(vsort[i]);
    47      }
    48      //进行输出,最后一个输出注意
    49      for(int i=0;i<vout.size()-1;i++)
    50      {
    51          printf("%05d %d %05d
    ",vout[i].add,vout[i].data,vout[i+1].add);
    52      } 
    53      printf("%05d %d -1
    ",vout[vout.size()-1].add,vout[vout.size()-1].data);                   
    54          
    55     return 0;
    56 }
    我会一直在
  • 相关阅读:
    2013414
    Juqery Html(),append()等方法的Bug
    UpdatePanel 与 jQuery
    (C#)方法参数关键字:ref、out、params详解
    ASP.NET MVC 3 RC2 版本的一些新特性及AllowHtml属性Bug解决办法
    [hystar整理]Entity Framework 教程 转
    SQL 中in exists 和临时表用法
    ASP.NET 用户控件自定义属性、方法、事件
    SQL选择不重复记录
    sql over 用法
  • 原文地址:https://www.cnblogs.com/zhien-aa/p/5660512.html
Copyright © 2020-2023  润新知