import java. util. ArrayList ;
import java. util. List ;
public class CircularLink {
private Node first = new Node ( - 1 ) ;
private Node helper;
private int size;
public CircularLink ( int num) {
this . size = num;
if ( num< 1 || num> size) {
throw new IndexOutOfBoundsException ( "下标越界" ) ;
}
first = new Node ( 1 ) ;
first. next = first;
Node pNode = first;
for ( int i = 2 ; i <= num; i++ ) {
Node newNode = new Node ( i) ;
pNode. next = newNode;
newNode. next = first;
pNode = newNode;
helper = pNode;
}
}
@Override
public String toString ( ) {
StringBuilder builder = new StringBuilder ( ) ;
builder. append ( "[" ) ;
Node pNode = first;
for ( int i = 0 ; i < size- 1 ; i++ ) {
builder. append ( pNode. data + "," ) ;
pNode = pNode. next;
}
builder. append ( pNode. data + "]" ) ;
return builder. toString ( ) ;
}
public String show ( int start, int count) {
List list = new ArrayList ( size) ;
if ( start< 1 || start> size) {
throw new IndexOutOfBoundsException ( "下标越界" ) ;
}
for ( int i = 1 ; i < start; i++ ) {
first = first. next;
helper = helper. next;
}
while ( list. size ( ) < size) {
for ( int i = 1 ; i < count; i++ ) {
first = first. next;
helper = helper. next;
}
list. add ( first. data) ;
first = first. next;
helper. next = first;
}
return list. toString ( ) ;
}
private class Node {
int data;
Node next;
public Node ( int data) {
this . data = data;
}
}
public static void main ( String [ ] args) {
CircularLink link = new CircularLink ( 5 ) ;
System . out. println ( link. toString ( ) ) ;
String res = link. show ( 1 , 2 ) ;
System . out. println ( res) ;
}
}