public void shit(int k) {
int n = curLen,p=0,i,j,l;
Object temp;
for(i = 1;i<=k;i++)
if(n%i==0&&k%i==0)
p=i;
for(i=0;i<p;i++) {
j=i;
l=(i+n-k)%n;
temp = listElem[i];
while(l!=i) {
listElem[j]=listElem[l];
j=l;
l=(j+n-k)%n;
}
listElem[j]=temp;
}
}
移动的逻辑主要在这块:
while(l!=i) {
listElem[j]=listElem[l];
j=l;
l=(j+n-k)%n;
}
listElem[j]=temp;
}