zoukankan      html  css  js  c++  java
  • 数据结构练习 02-线性结构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 (<= 105) which is the total number of nodes, and a positive K (<=N) 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

    提交了10次才完全正确,花了快5个小时。感觉自己实力好差。
    #include<iostream>
    #include <string>
    using namespace std;
    class linked{
    public:
        int data;
        int next;
    };
    linked *list = new linked[100000];
    int prehead;
    int nexthead;
    int Reverse(int head, int k){
        int cnt = 1,temp;
        int news = head;
        int olds = list[head].next;
        while (cnt < k){
            temp = list[olds].next;
            list[olds].next = news;
            news = olds;
            olds = temp;
            cnt++;
        }
        list[head].next = olds;
        prehead = head;
        nexthead = olds;
        return news;
    }
    int main(){
        int firstNode, address, next,N, k, data,head,preshead;
        int sum = 0;
        cin >> firstNode >> N >> k;
        for (int i = 0; i < N; i++){
            cin >> address >> data >> next;
            list[address].data = data;
            list[address].next = next;
        }
        int p = firstNode;
        while (p != -1){
            sum++;
            p = list[p].next;
        }
        head = Reverse(firstNode, k);
        for (int i = 1; i < sum / k; i++){
            preshead = prehead;
            list[preshead].next = Reverse(nexthead, k);
        }
        p = head;
        while (p!= -1){
            printf("%05d ",p);
            cout << list[p].data <<" ";
            if (list[p].next != -1)
                printf("%05d
    ", list[p].next);
            else
                cout << list[p].next << endl;
            p = list[p].next;
        }
    
        return 0;
    }

      ac的图片看着真的很爽。

  • 相关阅读:
    Virtual Box的一些东西
    sun 的Virtual box
    Powerdesigner的vbscript
    MemoryStream的一些问题
    vs2008 三大形象代言人
    ASP.NET学习之匿名方法
    asp.net2.0学习历程 菜鸟到中级程序员的飞跃
    ASP.NET程序员必看书
    设计模式学习扎马步
    MDI窗体改变背景
  • 原文地址:https://www.cnblogs.com/Zengineer/p/4534841.html
Copyright © 2011-2022 走看看