//数组方法,空间复杂度O(1)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int a[1000000];
int len;
void Reverse(int a[],int start,int last)
{
while(start<last)
{
int t = a[start];
a[start] = a[last];
a[last] = t;
start++;
last--;
}
}
int main()
{
int t,m,i;
scanf("%d",&len);//数组长度
for(i = 0; i < len; i++)
scanf("%d",&a[i]);//建立数组
scanf("%d",&t);//询问次数
while(t--)//询问过程
{
scanf("%d",&m);
Reverse(a,0,len-1);
Reverse(a,len-m,len-1);
Reverse(a,0,len-m-1);//改变数组顺序
for( i = 0; i < len; i++)
{
printf(i==0?"%d":" %d",a[i]);//顺序输出
}
printf("\n");
}
return 0;
}
//链表内存超限
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
}*p,*head,*q;
int main()
{
int n, m, k, i, j;
scanf("%d", &n);
head = (struct node*)malloc(sizeof(struct node));
head->next = NULL;
scanf("%d", &head->data);
q = head;
for(i = 0; i < n - 1; i++)
{
p = (struct node*)malloc(sizeof(struct node));
scanf("%d", &p->data);
p->next = NULL;
q->next = p;
q = p;
}
q->next = head;
scanf("%d", &m);
q = head;
for(i = 0; i < m; i++)
{
scanf("%d", &k);
for(j = 0; j < k; j++)
{
q = q->next;
}
for(j = 0; j < n; j++)
{
printf("%d ", q->data);
q = q->next;
}
printf("\n");
}
return 0;
}