看到马士兵老师在Java视频讲解到数组模拟链表的问题,自己试着写出了程序,现在总结一下以免以后又对这个问题产生疑惑。
首先列出程序代码:
public class ArrayToLinkList {
public static void main(String[] args) {
int[] a = new int[500];
for(int i=0; i<a.length-1; i++) {
a[i] = i+1;
}
a[a.length-1] = 0;
int index = 0;
int before = 0;
int = 0;
while(a[index] != index) {
countThree++;
if(countThree== 3) {
countThree= 0;
a[before] = a[index];
}
before = index;
index = a[index];
}
System.out.println(a[index]);
}
}
程序的目的是一个五百个数的数组,数三退一,最后算出数组在最后剩下的那个元素的下标。
这里总结如下:
一、数组的最后一个元素应该存储的是0。
二、a[0]的值是下一个数组元素的下标,也就是说循环中要用到下一个元素不是index++; 而应该是index=a[index];
三、因为程序是数三退一,所以数到三,也就是countThree==3时,当前index应该被退出,所以index之前的元素值不能为index 而应该变成 a[index]的值,这里需要用到index之前的元素,所以每次在index=a[index]之前要存储index值,即before=index;
四、上面条件满足之后就要让a[before] = a[index],这样就相当退出了当前index的元素。