リンクリスト内のノードを削除します
-
10-12-2019 - |
質問
今インデックスでノードを削除しようとしています。ユーザーが参照されているようにインデックスを選択できるように、インデックスを持つノードのリストを印刷します。私のロジックは、リストをインデックスで印刷するのが大丈夫だと思いますが、入力は出ていません:(
これを浮気する際には、まだノードのリストを印刷することができませんでしたが、「削除したいインデックスに入力」が出力され、ユーザーの選択を受けることができましたが、最終的には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);
}
}
.
除去方法: パブリック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());
. 解決
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.
他のヒント
Indices are in the range [0, length() - 1]
, so you should use
else if (index == length() - 1) {
instead.
所属していません StackOverflow