zoukankan      html  css  js  c++  java
  • 1074 Reversing Linked List (25 分)

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K=4, you must output 4→3→2→1→5→6.

    Input Specification:

    Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N (≤) which is the total number of nodes, and a positive K (≤) which is the length of the sublist to be reversed. The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1.

    Then N lines follow, each describes a node in the format:

    Address Data Next
     

    where Address is the position of the node, Data is an integer, and Next is the position of the next node.

    Output Specification:

    For each case, output the resulting ordered linked list. Each node occupies a line, and is printed in the same format as in the input.

    Sample Input:

    00100 6 4
    00000 4 99999
    00100 1 12309
    68237 6 -1
    33218 3 00000
    99999 5 68237
    12309 2 33218
     

    Sample Output:

    00000 4 33218
    33218 3 12309
    12309 2 00100
    00100 1 99999
    99999 5 68237
    68237 6 -1
     
     题解:(关键点)为节点设立order计数,方便排序,(复杂点)每一块的处理
    最后一个测试点过不去,难道是算法笔记上代码有问题?柳神代码正确
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1000010;
    #define inf 0x3fffffff
    struct Node{
        int address,data,next;
        int order;
    }node[maxn];
    bool cmp(Node a,Node b){
        return a.order<b.order;
    }
    int main(){
        for(int i=0;i<maxn;i++){
            node[i].order=maxn;
        }
        int begin,n,k;
        scanf("%d %d %d",&begin,&n,&k);
        int count=0;
        int address,data,next;
        for(int i=0;i<n;i++){
            scanf("%d %d %d",&address,&data,&next);
            node[address].address=address;
            node[address].data=data;
            node[address].next=next;
        }
        int p=begin;
        while(p!=-1){
            node[p].order=count++;
            p=node[p].next;
        }
        sort(node,node+maxn,cmp);
        int i,j;
        for(i=0;i<count/k;i++){
            for(j=(i+1)*k-1;j>i*k;j--){
                printf("%05d %d %05d
    ",node[j].address,node[j].data,node[j-1].address);
            }
            printf("%05d %d ",node[i*k].address,node[i*k].data);
            if(i<n/k-1){
                printf("%05d
    ",node[(i+2)*k-1].address);
            }
            else{
                if(n%k==0){
                    printf("%d
    ",-1);
                }
                else
                {
                    printf("%05d
    ",node[(i+1)*k].address);
                    for(j=n/k*k;j<n;j++){
                        if(j!=n-1){
                            printf("%05d %d %05d
    ",node[j].address,node[j].data,node[j+1].address);
                        }
                        else{
                            printf("%05d %d %d
    ",node[j].address,node[j].data,-1);
                        }
                        
                    }
                        
                }
    
        }
        }
        return 0;
    }
  • 相关阅读:
    年轻人的第一个 Spring Boot 应用,太爽了!
    面试问我 Java 逃逸分析,瞬间被秒杀了。。
    Spring Boot 配置文件 bootstrap vs application 到底有什么区别?
    坑爹的 Java 可变参数,把我整得够惨。。
    6月来了,Java还是第一!
    Eclipse 最常用的 10 组快捷键,个个牛逼!
    Spring Cloud Eureka 自我保护机制实战分析
    今天是 Java 诞生日,Java 24 岁了!
    厉害了,Dubbo 正式毕业!
    Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!
  • 原文地址:https://www.cnblogs.com/dreamzj/p/15018151.html
Copyright © 2011-2022 走看看