仅验证了样例
我想的是遍历一下链表,然后把它们按顺序放到一个新的vector数组中,然后输出。先处理一下多出来单独成一组的,然后一个一个回去找间隔k个结点输出。
#include <iostream>
#include <vector>
using namespace std;
const int maxv=100010;
struct Node{
int addr;
int data;
int next;
}node[maxv];
vector<Node> list,ans;
int main(){
int st,n,k;
cin>>st>>n>>k;
for(int i=0;i<n;i++){
int addr,data,next;
cin>>addr>>data>>next;
node[addr].addr=addr;
node[addr].data=data;
node[addr].next=next;
}
int len=0;
while(st!=-1){
len++;
list.push_back(node[st]);
st=node[st].next;
}
int stid=len-len%k;
for(int i=stid;i<len;i++){
ans.push_back(list[i]);
}
for(int i=stid-k;i>=0;i=i-k){
for(int j=i;j<i+k;j++){
ans.push_back(list[j]);
}
}
for(int i=0;i<ans.size()-1;i++){
printf("%05d %d %05d\n",ans[i].addr,ans[i].data,ans[i+1].addr);
}
printf("%05d %d -1\n",ans[ans.size()-1].addr,ans[ans.size()-1].data);
return 0;
}