Supprimer un nœud dans une liste liée
-
10-12-2019 - |
Question
essayer de supprimer un nœud par index maintenant.J'aimerais imprimer la liste des nœuds avec des indices afin que l'utilisateur puisse sélectionner l'index comme indiqué.Je pense que ma logique est correcte dans l'impression de la liste avec les indices, mais aucune entrée ne sort :(
À un moment d'un point de tromper avec cela, j'étais toujours incapable d'imprimer la liste des nœuds, mais l'entrée "Entrer dans l'index que vous souhaitez supprimer" était la sortie et a pu prendre la sélection des utilisateurs mais a finalement obtenu une nullpoinpointeexception.
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);
}
}
la méthode de retrait: Public Void Realentertry (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--;
}
}
La nullpointerException vient de:
//set node after temp's previous to temp's previous
temp.getNext().setPrev(temp.getPrev());
La solution
You should check if temp.getNext()
is not null
before calling the setPrev()
on it.
Also, you should check with length()-1
as you have nodes which are zero indexed.
Autres conseils
Indices are in the range [0, length() - 1]
, so you should use
else if (index == length() - 1) {
instead.