现在尝试按索引删除节点。我想打印带索引的节点列表,以便用户可以选择索引。我认为我的逻辑可以打印带有索引的列表,但没有输出:(
有一次愚弄这个,我仍然无法打印节点列表,但输出了“输入你要删除的索引”,并且能够进行用户选择,但最终得到了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());
答案 0 :(得分:2)
在调用temp.getNext()
之前,您应该检查null
是否不是setPrev()
。
此外,您应该检查length()-1
,因为您拥有零索引的节点。
答案 1 :(得分:1)
指数在[0, length() - 1]
范围内,因此您应该使用
else if (index == length() - 1) {
代替。