• 02-线性结构3 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
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    #define MAXSIZE 1000010
    
    struct node
    {
        int data;
        int next;    
    } node[MAXSIZE];
    
    int List[MAXSIZE];
    
    int main()
    {
        int begin,n,k;
        cin >> begin >> n >> k;
        int Address,Data,Next;
        for (int i = 0; i < n; i++)
        {
            cin >> Address >> Data >> Next;
            node[Address].data = Data;
            node[Address].next = Next;
        }
        
        int count = 0;
        int p = begin;
        while (p != -1) 
        {
            List[count++] = p;
            p = node[p].next;
        }
    
        for(int i = 0; i + k <= count; i += k)
        {
            reverse(&List[i],&List[i+k]);        
        }
    /*    
        int i = 0;
        while (i + k <= count)
        {
            reverse(&List[i],&List[i+k]);
            i += k;
        }
    */    
        for(int i = 0; i < count; i++)
        {
            if(i < count - 1)
            {
                printf("%05d %d %05d
    ",List[i],node[List[i]].data,List[i+1]);        
            }
            else
            {
                printf("%05d %d -1",List[i],node[List[i]].data);        
            }    
        }
    
        return 0;
    }
  • 相关阅读:
    update inner join
    Centos 7安装docker
    使用Let's Encrypt搭建永久免费的HTTPS服务
    upstream timed out (10060: A connection attempt failed because the connected party did not properly respond
    MySQL死锁分析一例
    solr定时更新索引遇到的问题(SolrDataImportProperties Error loading DataImportScheduler properties java.lang.NullPointerException)
    Java中的关键字 transient
    Spring 4 使用Freemarker模板发送邮件&添加附件
    Spring 4 创建REST API
    Spring 4 异常处理
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11709209.html
Copyright © 2020-2023  润新知