public class CircleSingleLinkedList {
private Boy first = new Boy ( - 1 ) ;
public void addBoy ( int nums) {
if ( nums< 1 ) {
System . out. println ( "数据不正确" ) ;
return ;
}
Boy temp = null ;
for ( int i = 1 ; i <= nums; i++ ) {
Boy boy = new Boy ( i) ;
if ( i == 1 ) {
first = boy;
first. setNext ( first) ;
temp = first;
} else {
temp. setNext ( boy) ;
boy. setNext ( first) ;
temp = boy;
}
}
}
public void showBoy ( ) {
if ( null == first) {
System . out. println ( "链表为空.." ) ;
return ;
}
Boy boy = first;
while ( true ) {
System . out. printf ( "小孩子的编号%d\n" , boy. getNo ( ) ) ;
if ( boy. getNext ( ) == first) {
break ;
}
boy = boy. getNext ( ) ;
}
}
public void countBoy ( int startNo, int countNum, int nums) {
if ( null == first || startNo < 1 || startNo > nums) {
System . out. println ( "参数输入有误..." ) ;
return ;
}
Boy helper = first;
while ( true ) {
if ( helper. getNext ( ) == first) {
break ;
}
helper = helper. getNext ( ) ;
}
for ( int j = 0 ; j < startNo - 1 ; j++ ) {
first = first. getNext ( ) ;
helper = helper. getNext ( ) ;
}
while ( true ) {
if ( helper == first) {
break ;
}
for ( int j = 0 ; j < countNum - 1 ; j++ ) {
first = first. getNext ( ) ;
helper = helper. getNext ( ) ;
}
System . out. printf ( "小孩子%d 出列\n" , first. getNo ( ) ) ;
first = first. getNext ( ) ;
helper. setNext ( first) ;
}
System . out. printf ( "最后出圈的小孩编号%d\n" , first. getNo ( ) ) ;
}
}
测试类
public class LinkedTest {
public static void main ( String [ ] args) {
CircleSingleLinkedList circleSingleLinkedList = new CircleSingleLinkedList ( ) ;
circleSingleLinkedList. addBoy ( 5 ) ;
circleSingleLinkedList. showBoy ( ) ;
circleSingleLinkedList. countBoy ( 1 , 2 , 5 ) ;
}
}