题目:有一个整型数组a[n]顺序存放0 ~ n-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。
以 8 个数(n=8)为例:{0,1,2,3,4,5,6,7},
0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。
java版本的实现:
package cn.cat.test;
import java.util.Iterator;
import java.util.LinkedList;
public class Test30 {
/** 删数字(华为笔试题)
* @Description:
* @author gwj
* @Created 2017年9月18日 上午11:14:47
* @param args
*/
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<Integer>();
for (int i = 0; i < 8; i++) {
list.add(i);
}
//方法返回的是最后删除的数值,链表数据的下标和存储的数值是一样的,故最后删除的数值就是原来的索引下标。
int lastVal = remove(list, 2);
System.out.println("最后个被删除的索引下标为: " + lastVal);
}
static int remove(LinkedList<Integer> list, int intervalIndex) {
Iterator<Integer> iterator = list.iterator();
int loopCount = 0;
int lastVal = -1;
while (iterator.hasNext()) {
lastVal = iterator.next();
if (loopCount != 0 && (loopCount % intervalIndex == 0)) {
iterator.remove();
}
loopCount++;
}
if (list.size() > 0 && (list.size() % intervalIndex == 0)) {
return remove(list, intervalIndex);
}
//返回最后个数值。
return lastVal;
}
}