題目:有一個整型數組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;
}
}