PAT (Advanced Level) Practice 1074 Reversing Linked List (25 分)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nightmare_ak/article/details/84342964

把链表按顺序存下来之后,每k个反转一次,输出的时候,下一个节点的地址就是当前节点的next

#include<cstdio>
#include<algorithm>
using namespace std;

const int N=1e6+5;

struct Node
{
    int now,val,nxt;
}node[N],newnode[N];

int main()
{
    int head,n,k;
    scanf("%d%d%d",&head,&n,&k);
    for(int i=1;i<=n;i++)
    {
        int x;scanf("%d",&x);
        scanf("%d%d",&node[x].val,&node[x].nxt);
        node[x].now=x;
    }
    int cnt=0;
    for(int i=head;i!=-1;i=node[i].nxt)
        newnode[++cnt]=node[i];
    for(int i=1;i<=cnt;i+=k)
    {
        if(i+k>cnt+1) break;
        reverse(newnode+i,newnode+i+k);
    }
    for(int i=1;i<cnt;i++)
        printf("%05d %d %05d\n",newnode[i].now,newnode[i].val,newnode[i+1].now);
    printf("%05d %d %d\n",newnode[cnt].now,newnode[cnt].val,-1);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Nightmare_ak/article/details/84342964