【1074 25 链表】 Reversing Linked List
传送门
题意
给定链表中的\(n\)个节点,每个节点有地址、数据、下一节点地址,给定一个\(k\),将链表中每\(k\)个进行翻转,最后输出
数据范围
\(n\leq 10^{5},k\leq n\)
题解
- 三个数据分开存储
- 给出的节点有不再链表中的,将在链表中的地址加入
vector - 利用
reverse将地址进行翻转即可,vector需要左边界以\(0\)为起点,右边界以\(1\)
Code
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
int data[N],ne[N];
int main(){
int now,n,k; cin>>now>>n>>k;
for(int i=0;i<n;i++){
int a,b,c; cin>>a>>b>>c;
data[a]=b; ne[a]=c;
}
vector<int>list;
while(now!=-1){
list.push_back(now);
now=ne[now];
}
int times=list.size()/k;
for(int i=0;i<times;i++)
reverse(list.begin()+i*k,list.begin()+i*k+k);
for(int i=0;i<list.size();i++) {
printf("%05d %d ",list[i],data[list[i]]);
if(i==list.size()-1) printf("-1");
else printf("%05d\n",list[i+1]);
}
}

浙公网安备 33010602011771号