• 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;
    }
  • 相关阅读:
    在MyEclipse中运行tomcat报错 严重: Error starting static Resources
    MyEclipse 2015 运行tomcat 内存溢出的解决方法
    (转)Tomcat内存设置详解
    Object调用控件的办法
    Hibernate主键生成方式之hilo
    (转)“中国第一程序员” 求伯君的传奇经历
    雷军相识求伯君
    (转)雷军重掌金山幕后:与求伯君暗战三年两次逼宫
    华军软件发展及盈利模式
    中年人编程
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11709209.html
Copyright © 2020-2023  润新知