用链表写的,复习一下链表
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}LNode,*LinkList;
int main()
{
int n,i,t;
cin>>t;
while(t--){
cin>>n;
if(n==1) {cout<<1<<endl;continue;}
LinkList s,p,head;
head=(LinkList) malloc(sizeof(LNode));
s=head;
s->next=NULL;
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
p->data=i;
s->next=p;
if(i==1) head->next=p;
p->next=NULL;
s=p;
}
s=head;
p=s->next;
i=1;
int k=0;
while(head->next->next->next!=NULL)
{
int j=1;
s=head->next;
for(;;s=s->next){
if(s->next==NULL) break;
else
j++;
}
if(j<=3) break;
while(1){
if(p==NULL)
{
s=head;
p=s->next;
i=1;
break;
}
if(i==2){
p=p->next;
s->next=p;
i=1;
}
else if(p!=NULL){
s=p;
p=p->next;
i++;
}
}
j=1;
s=head->next;
for(;;s=s->next){
if(s->next==NULL) break;
else
j++;
}
if(j<=3) break;
while(1){
if(p==NULL)
{
s=head;
p=s->next;
i=1;
break;
}
if(i==3){
p=p->next;
s->next=p;
i=1;
}
else if(p!=NULL){
s=p;
p=p->next;
i++;
}
}
j=1;
s=head->next;
for(;;s=s->next){
if(s->next==NULL) break;
else
j++;
}
if(j<=3) break;
}
s=head->next;
cout<<s->data;
s=s->next;
for(;;s=s->next){
cout<<' '<<s->data;
if(s->next==NULL) break;
}
cout<<endl;
}
return 0;
}