Циклический двусвязный список indexOf и удаление функций некорректно - PullRequest
0 голосов
/ 01 марта 2019

В настоящее время я реализую круговой двусвязный список с фиктивным головным узлом.Мои функции добавления (добавление элемента по заданному индексу, в начале или в конце), кажется, работают безупречно, но я не могу экстраполировать, чтобы создать функционирующий indexOf (который возвращает индекс элемента) или удалить (удалить узел взаданный индекс) метод.

При отладке indexOf, кажется, захватывает неправильный индекс.Когда дан список:

[Alabama, Alaska, Arizona, Arkansas, Wyoming, California]

Вызов

list.remove(indexOf("Wyoming"));

Возвращает

[Alabama, Alaska, Arizona, Arkansas, Wyoming, ]

Вот функция indexOf:

public int indexOf(E e) {
    Node<E> current = head;
    for (int i = 0; i < size; i++) {
        if (e.equals(current.element)) {
            return i;
        }
        current = current.next;
    }
    return -1;
}

А вот и функция удаления:

public E remove(int index) {
    if (index < 0 || index >= size) {
        throw new NoSuchElementException();
    } else if (index == 0) {
        return removeFirst();
    } else if (index == size - 1) {
        return removeLast();
    } else {


        Node<E> previous = head;
        for (int i = 1; i < index; i++) {
            previous = previous.next;
        }
        Node<E> current = previous.next;
        previous.next = current.next;
        size--;
        return current.element;

    }
}

1 Ответ

0 голосов
/ 01 марта 2019

Если head всегда должно быть null, то ваш indexOf() метод не выглядит правильным

public int indexOf(E e) {
    Node<E> current = head.next; // Add this to effectively begin with the first index of your list
    for (int i = 0; i < size; i++) {
        if (e.equals(current.element)) { // This will never be equals, because of the first time current being null
            return i;
        }
        current = current.next;
    }
    return -1;
}
...