Удаление узла в связанном списке - PullRequest
0 голосов
/ 09 марта 2012

Попытка удалить узел по индексу сейчас. Я хотел бы распечатать список узлов с индексами, чтобы пользователь мог выбрать индекс, как видно. Я думаю, что моя логика в порядке в печати списка с индексами, но никакой ввод не выходит :(

В какой-то момент, дурачась с этим, я все еще не смог распечатать список узлов, но было выведено «войти в индекс, который вы хотите удалить», и я смог выбрать пользователя, но в итоге получил исключение NullPointerException ,

            else if (menu.equals("d")) {
            EntryNode temp = head;
            while (temp != null) {
                for (int i = 0; i < addressBook.length(); i++) {
                    //gets node at index
                    System.out.println(temp.getFirstName() + i);
                    temp = temp.getNext();
                }
            System.out.println(" ");
            System.out.println("Please enter the index of the entry you wish to delete ");
            int index = keyboard.nextInt();
            addressBook.removeEntry(index);
            }

        }

Способ удаления: public void removeEntry (int index) {

    //delete from the head
    if (index == 0) {
        EntryNode temp = head;
        head = temp.getNext();
        temp.setNext(null);
        head.setPrev(null);
        size--;
    }
    //delete from the tail
    else if (index == length()) {
        EntryNode temp = tail;
        temp.setPrev(null);
        tail.setNext(null);
        tail = temp.getPrev();

        size--;
    }
    //in the middle
    else {
        EntryNode temp = head;
        for (int i = 0; i < index; i++) {
            //gets node at index
            temp = temp.getNext();
        }
        //set node after temp's previous to temp's previous 
        temp.getNext().setPrev(temp.getPrev());
        temp.getPrev().setNext(temp.getNext());
        temp.setNext(null);
        temp.setPrev(null);
        size--;
    }
}

Исключение NullPointerException происходит от:

//set node after temp's previous to temp's previous 
temp.getNext().setPrev(temp.getPrev());

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

Вы должны проверить, если temp.getNext() не null, прежде чем вызывать setPrev() на нем.

Кроме того, вы должны проверить с помощью length()-1, поскольку у вас есть узлы с нулевым индексированием.

1 голос
/ 09 марта 2012

Индексы находятся в диапазоне [0, length() - 1], поэтому вы должны использовать

else if (index == length() - 1) {

вместо.

...