链表索引方法java



我在编写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的值从未更改。尝试从头到尾迭代,并报告上次找到匹配项时的索引。

相关内容

  • 没有找到相关文章

最新更新