PAT A1074 Reversing Linked List (25)--链表2

总结:

1.采用两个数组存储每个节点的数据和下一个节点的地址

2.reverse操作通过遍历一遍链表把每个节点的地址存在list中,然后将翻转操作变成从list到result地址的对应变化输出即可

代码:

#include <iostream>
using namespace std;
int data[110000], next1[110000];
int list[11000], result[110000];
int main() {

    int begin, n, tt;
    scanf("%d%d%d",&begin,&n,&tt);
    for (int i = 0; i < n; i++)
    {
        int add;
        scanf("%d",&add);
        scanf("%d%d", &data[add], &next1[add]);
    }
    int num = 0; int k = begin;
    while (k!=-1){
        list[num++] = k;
        //printf("%05d %d %05d\n",k,data[k],next1[k]);
        k = next1[k];
    }
    int ci = num / tt; int yu = num%tt; int yt = 0;
    for (int i = 0; i < num - yu; i++)
    {
        yt = i / tt;
        result[((tt - 1) - i%tt) + tt*yt]=list[i];
    }
    for (int i = num - yu; i < num; i++)
        result[i] = list[i];
    //输出
    for (int i = 0; i < num-1; i++)
    {
        printf("%05d %d %05d\n", result[i], data[result[i]], result[i+1]);
    }
    printf("%05d %d -1\n", result[num-1], data[result[num-1]], next1[result[num-1]]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/luoshiyong123/article/details/81432002