用纯数组实现链表。写了有点久,主要是一些细节上的实现有点烦。
#include <iostream> #include <cstdio> using namespace std; struct Node{ int Pre; int Next; int Key; Node(int p,int n,int k):Pre(p),Next(n),Key(k){} }; Node *list[100010]; int main() { int root,N,K; cin>>root>>N>>K; for(int i=0;i<N;i++) { int addr,key,next; cin>>addr>>key>>next; list[addr]=new Node(0,next,key); } list[root]->Pre=-1; for(int addr=root;list[addr]->Next!=-1;addr=list[addr]->Next) { list[list[addr]->Next]->Pre=addr; } int head=root,cnt,rear=-1; for(int i=head,flag=0;i!=-1&&list[i]->Next!=-1;) { cnt=K; while(cnt!=1&&list[i]->Next!=-1) { i=list[i]->Next; cnt--; } if(cnt==1) { if(flag==0) { root=i; flag=1; } if(rear!=-1)list[rear]->Next=i; head=list[i]->Next; while(cnt!=K) { list[i]->Next=list[i]->Pre; i=list[i]->Pre; cnt++; } list[i]->Next=head; rear=i; i=head; } } while(root!=-1) { if(list[root]->Next!=-1)printf("%05d %d %05d ",root,list[root]->Key,list[root]->Next); else printf("%05d %d %d ",root,list[root]->Key,list[root]->Next); root=list[root]->Next; } }