zoukankan      html  css  js  c++  java
  • 浙大数据结构课后习题 练习二 7-2 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 <iostream>
    #include <vector>
    #define M 100000
    using namespace std;
    struct ele{
        int addr;
        int data;
        int next=-1;
    };
    int main(){
        int iniAddr,num,revNum,tmpAddr,tmpData,tmpNext;
        ele element[M],last;
        cin>>iniAddr>>num>>revNum;
        while(num--){
            cin>>tmpAddr>>tmpData>>tmpNext;
            element[tmpAddr].addr=tmpAddr;
            element[tmpAddr].data=tmpData;
            element[tmpAddr].next=tmpNext;
        }
        vector<ele> vec;
        while(iniAddr!=-1){
            vec.push_back(element[iniAddr]);
            iniAddr=element[iniAddr].next;
        }
        //反转
        int point=0;bool start=true;
        while(true){
            point+=revNum;
            if(point>vec.size()) break;
            else{
                for(int i=point-1,j=0;j<revNum;j++,i--){
                    if(start) printf("%05d ",vec[i].addr);
                    else printf("%05d
    %05d ",vec[i].addr,vec[i].addr);
                    printf("%d ",vec[i].data);
                    last=vec[i];
                    start=false;
                }
            }
        }
        point-=revNum;
        for(int i=point;i<vec.size();i++){
            if(start) printf("%05d ",vec[i].addr);
            else printf("%05d
    %05d ",vec[i].addr,vec[i].addr);
            printf("%d ",vec[i].data);
            start=false;
            last=vec[i];
        }
        printf("-1");
        system("pause");
        return 0;
    }
  • 相关阅读:
    Codeforces Round #603 (Div. 2) E. Editor(线段树)
    Codeforces Round #603 (Div. 2) D. Secret Passwords(并查集)
    Java的DAO设计模式
    js实现本地时间同步
    循环播放
    正则表达式(2)
    正则表达式(1)
    第十八个知识点:画一个描述ECB,CBC,CTR模式的操作
    第十七个知识点:描述和比较DES和AES的轮结构
    第四十一个知识点 所有的侧信道分析都是能量分析吗
  • 原文地址:https://www.cnblogs.com/littlepage/p/11375093.html
Copyright © 2011-2022 走看看