问题:
M个人围成一圈,从第一个开始报数,第N个将被杀掉,最后剩下一个,其余人都将被杀掉。例如M=6,N=5,被杀掉的顺序是:5,4,6,2,3。
解决问题的思路
利用环形链表的闭合性,移动链表指针并删除元素,直至最后一个元素。
源代码
List接口
package com.zarek;
public interface List<E> {
static final int ELEMENT_NOT_FOUND = -1;
/**
*
* @return 元素个数
*/
int size();
/**
* 清空元素
*/
void clear();
/**
* 返回指定位置的元素
* @param index
* @return
*/
int indexOf(E element);
/**
* 判断元素是否存在
* @param element
* @return 布尔值
*/
boolean contains(E element);
/**
* 判断是否为空
* @return
*/
boolean isEmpty();
/**
* 向指定位置添加元素并返回原来位置的元素
* @param index
* @param element
* @return 原来位置的元素
*/
void add(int index,E element);
/**
* 向末尾添加元素并返回原来位置的元素
* @param element
* @return 原来位置的元素
*/
void add(E element);
/**
* 删除指定位置的元素,并返回删除元素
* @param index
* @return 被删除的元素
*/
E remove(int index);
/**
* 获取指定位置的元素并返回
* @param index
* @return 指定位置的元素
*/
E get(int index);
/**
* 设置指定位置的元素,并返回原来此位置的元素
* @param index
* @param element
* @return 原来的元素
*/
E set(int index,E element);
}
抽象类AbstractList
package com.zarek;
public abstract class AbstractList<E> implements List<E> {
protected int size;
public E[] elements;
/**
*
* @return 元素个数
*/
public int size() {
return s