//结点类
public class Node { Node next;
Object obj; public Node(Node node) {
next = node;
} public Node(Node node, Object element) {
next = node;
obj = element;
} public Node getNext() {
return next;
} public void setNext(Node node) {
next = node;
} public void setElement(Object element) {
obj = element;
} public Object getElement() {
return obj;
} public String toString() {
return obj.toString();
}
}//链表类
public class Link { Node current, head;
int size; public Link() {
head = current = new Node(null);
head.next = head;
size = 0;
} public void index(int i) {
if (i > size || i < -1) {
System.out.println("参数错误");
}
if (i == -1) {
return;
}
current = head.next;
int j = 0;
while ((current != null) && j < i) {
current = current.next;
j++;
}
} public void insert(int i, Object element) {
if (i > size || i < -1) {
System.out.println("参数错误!");
}
index(i - 1);
current.setNext(new Node(current.next, element));
size++;
} public Object delete(int i) {
if (size == 0) {
System.out.println("链表中已无元素可供删除!");
} if (i > size || i < -1) {
System.out.println("参数错误!");
} index(i - 1);
Object element = current.next.getElement();
current.setNext(current.next.next);
size --;
System.out.println("元素" + element +"已被删除"); return element;
} public Object getData(int i) {
if (i > size || i < -1) {
System.out.println("参数错误!");
}
index(i);
return current.getElement();
} public int size() {
return size;
} public boolean isEmpty() {
return size == 0;
}
}
//测试类//测试链表的输出和删除
public class Tester1 {
public static void main(String[] args){
Link link = new Link();
int n = 10;
for(int i=0; i<n; i++){
link.insert(i, new Integer(i+1)); //插入元素
}
for(int k=0; k<link.size; k++){
System.out.print(link.getData(k) + " "); //输出插入的元素
} System.out.println(); link.delete(4); //删除第四个结点,为什么当此句存在时,元素值为6的结点无法删除????????????????????????????? for(int k=0; k<link.size; k++){
System.out.print(link.getData(k) + " "); //输出插入的元素
} System.out.println();
for(int i=0; i<link.size; i++){
if(Integer.parseInt(link.getData(i).toString()) % 2 == 0){
link.delete(i);
}
}
System.out.println("元素值为偶数的结点已被删除!");
for(int j=0; j<link.size; j++){
System.out.print(link.getData(j) + " ");
}
System.out.println();
}
}
//link.delete(4); //删除第四个结点,为什么当此句存在时,元素值为6的结点无法删除?????????????????????????????
//小白求解!!!!!
public class Node { Node next;
Object obj; public Node(Node node) {
next = node;
} public Node(Node node, Object element) {
next = node;
obj = element;
} public Node getNext() {
return next;
} public void setNext(Node node) {
next = node;
} public void setElement(Object element) {
obj = element;
} public Object getElement() {
return obj;
} public String toString() {
return obj.toString();
}
}//链表类
public class Link { Node current, head;
int size; public Link() {
head = current = new Node(null);
head.next = head;
size = 0;
} public void index(int i) {
if (i > size || i < -1) {
System.out.println("参数错误");
}
if (i == -1) {
return;
}
current = head.next;
int j = 0;
while ((current != null) && j < i) {
current = current.next;
j++;
}
} public void insert(int i, Object element) {
if (i > size || i < -1) {
System.out.println("参数错误!");
}
index(i - 1);
current.setNext(new Node(current.next, element));
size++;
} public Object delete(int i) {
if (size == 0) {
System.out.println("链表中已无元素可供删除!");
} if (i > size || i < -1) {
System.out.println("参数错误!");
} index(i - 1);
Object element = current.next.getElement();
current.setNext(current.next.next);
size --;
System.out.println("元素" + element +"已被删除"); return element;
} public Object getData(int i) {
if (i > size || i < -1) {
System.out.println("参数错误!");
}
index(i);
return current.getElement();
} public int size() {
return size;
} public boolean isEmpty() {
return size == 0;
}
}
//测试类//测试链表的输出和删除
public class Tester1 {
public static void main(String[] args){
Link link = new Link();
int n = 10;
for(int i=0; i<n; i++){
link.insert(i, new Integer(i+1)); //插入元素
}
for(int k=0; k<link.size; k++){
System.out.print(link.getData(k) + " "); //输出插入的元素
} System.out.println(); link.delete(4); //删除第四个结点,为什么当此句存在时,元素值为6的结点无法删除????????????????????????????? for(int k=0; k<link.size; k++){
System.out.print(link.getData(k) + " "); //输出插入的元素
} System.out.println();
for(int i=0; i<link.size; i++){
if(Integer.parseInt(link.getData(i).toString()) % 2 == 0){
link.delete(i);
}
}
System.out.println("元素值为偶数的结点已被删除!");
for(int j=0; j<link.size; j++){
System.out.print(link.getData(j) + " ");
}
System.out.println();
}
}
//link.delete(4); //删除第四个结点,为什么当此句存在时,元素值为6的结点无法删除?????????????????????????????
//小白求解!!!!!
if(Integer.parseInt(link.getData(i).toString()) % 2 == 0){
link.delete(i);
}你这个for的停止条件,是link.size,如果在迭代的过程中列表的大小发生了变化,就可能会出现迭代次数变多或者变少,导致迭代的结果不对,所以java的集合类推荐使用Iterator迭代,如果在迭代过程中改变了迭代集合的大小,就会抛出迭代不一致的异常,这样可以在最大程度上减少程序出错的可能。
所以这里强烈推荐你实现Iterator接口来迭代,更加安全。修改成如下代码结果即正确:int size = link.size;
for(int i=0; i<size; i++){
if(Integer.parseInt(link.getData(i).toString()) % 2 == 0){
link.delete(i);
}
PS:另外,公开成员变量也是java不推荐的,应该使用getter和setter.