删数字(华为笔试题)

题目:有一个整型数组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;
	}

}


posted @ 2017-09-18 11:35  奕辰杰  阅读(214)  评论(0编辑  收藏  举报