zoukankan      html  css  js  c++  java
  • PAT 1025. 反转链表 (25)

    给定一个常数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<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<stdlib.h>
     5 typedef struct Link{
     6     int a;
     7     int d;
     8     int n;
     9 }lin;
    10 int a[100010][2];
    11 lin link[100010];
    12 int main(){
    13     int start;
    14     int n;
    15     int m;
    16     int temp1,temp2,temp3;
    17     scanf("%d %d %d",&start,&n,&m);
    18     for(int i=0;i<n;i++){
    19         scanf("%d %d %d",&temp1,&temp2,&temp3);
    20         a[temp1][0] = temp2;
    21         a[temp1][1] = temp3;
    22     }
    23     int temp = start;
    24     for(int i=0;i<n;i++){
    25         link[i].a = temp;
    26         link[i].d = a[temp][0];
    27         link[i].n = a[temp][1];
    28         temp = a[temp][1];
    29         if(temp==-1)
    30         {
    31             n = ++i;
    32             break;
    33         }
    34     }
    35     int i=0;
    36     int j;
    37     while(i+m<=n){
    38         for(j=i+m-1;j>i;j--){
    39             printf("%05d %d %05d
    ",link[j].a,link[j].d,link[j-1].a);
    40         }
    41         if(i+m+m<=n)
    42             printf("%05d %d %05d
    ",link[j].a,link[j].d,link[j+m+m-1].a);
    43         else if(i+m!=n)
    44             printf("%05d %d %05d
    ",link[j].a,link[j].d,link[j+m].a);
    45         else
    46         printf("%05d %d -1
    ",link[j].a,link[j].d);
    47         i = i+m;
    48     }
    49     if(i<n){
    50         for(;i<n-1;i++){
    51         printf("%05d %d %05d
    ",link[i].a,link[i].d,link[i].n);
    52         }
    53         printf("%05d %d -1
    ",link[i].a,link[i].d);
    54     }
    55     
    56     
    57 }
  • 相关阅读:
    【CodeForces】[659C]Tanya and Toys
    【CodeForces】[659A]Round House
    高并发网络编程之epoll详解
    Linux写时拷贝技术(copy-on-write)
    5种服务器网络编程模型讲解
    5种服务器网络编程模型讲解
    当你输入一个网址的时候,实际会发生什么?
    error: std::ios_base::ios_base(const std::ios_base&)’是私有的
    C++和JAVA的区别
    为什么内联函数,构造函数,静态成员函数不能为virtual函数
  • 原文地址:https://www.cnblogs.com/lolybj/p/6195457.html
Copyright © 2011-2022 走看看