当前位置: 代码迷 >> 综合 >> 1074 链表翻转(柳神代码思路)yyds
  详细解决方案

1074 链表翻转(柳神代码思路)yyds

热度:57   发布时间:2024-02-11 13:28:01.0

题意:

n,k,翻转链表

思路

采用data[maxn],next[maxn]和list[maxn],ans[maxn]来记录链表
其他的都挺简单的,就是翻转的规律难找:
ans[i]=list[i/k*k+k-1-i%k];

AC代码:

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100010;
int main(){int n,k,p,sum=0;int data[maxn],next[maxn],list[maxn],ans[maxn];cin >> p >> n >> k;for(int i=0;i<n;i++){int s,d,e;scanf("%d%d%d",&s,&d,&e);data[s]=d;next[s]=e;}for(;p!=-1;p=next[p]){list[sum++]=p;}for(int i=0;i<sum;i++) ans[i]=list[i];for(int i=0;i<sum-sum%k;i++){ans[i]=list[i/k*k+k-1-i%k];	}for(int i=0;i<sum-1;i++){printf("%05d %d %05d\n",ans[i],data[ans[i]],ans[i+1]);}printf("%05d %d -1",ans[sum-1],data[ans[sum-1]]);return 0;
}