我在编写finalIndexOf方法时遇到问题,该方法应返回当前对象列表中最后一个等于参数元素的元素的索引,这意味着可以使用重复元素。例如,如果链接列表有2,4,4,5,6,7,7,7,并且调用了finalIndexOf(4),则应返回2,因为最后一个4位于索引2。当我运行finalIndexOf时,我似乎进入了某种无限循环,导致什么都不返回,因为什么都没发生,所以我不得不手动终止程序。感谢您的帮助!
private class Node<N extends Comparable<N>> {
private N data;
private Node<N> next;
}
protected Node<L> head;
public List() {
head = null;
}
private Node<L> getLast() {
Node<L> node = head;
while (node.next != null) {
node = node.next;
}
return node;
}
public int listSize() {
if (head == null)
return 0;
int size = 0;
for (Node<L> n = head; n != null; n = n.next)
size++;
return size;
}
public int finalIndexOf(L element) {
int index = listSize();
Node<L> n = getLast();
while (n != null) {
if ((element == null) && (n.data == null))
return index;
if (n.data != null)
if (n.data.compareTo(element) == 0)
return index;
index--;
}
return -1;
}
遍历您的列表,因为您只有下一个,所以您必须从头到尾进行。若节点值和搜索到的元素相同,则将当前索引分配给结果,在迭代整个列表后返回该结果。
private int finalIndexOf(L element) {
int index = 0;
int result = -1;
Node<L> node = head;
while (node != null) {
if (node.data != null && node.data.compareTo(element) == 0) {
result = index;
}
node = node.next;
index++;
}
return result;
}
您有一个无限while循环,因为您从不更改循环中循环条件的n
变量。
这里有一个提示:将列表从第一项迭代到最后一项,并返回您找到的最后一个匹配项的索引。
您似乎试图从链表的末尾向后追溯,并在匹配后立即返回索引。这是一个很好的策略,但您没有node.prev
。您只有一个单独链接的列表。此外,您正在while循环中更改index
,但n的值从未更改。尝试从头到尾迭代,并报告上次找到匹配项时的索引。