在只有一个Node情况的链接列表中,我尝试使用reoveFromHead()删除它;我在toString()方法中得到一个nullpointer。
public void removeFromHead(){
if(head==null)
return;
else{
head=head.next;
}
}
public String toString() {
String result = " ";
ListNode a=head;
while (a.next!=null){
result +=" "+a.item;
a=a.next;
}
result+=" "+a.item;
return result;
}
有人可以指出错误在哪里吗?
答案 0 :(得分:5)
如果head=head.next;
为您提供null
(因为没有其他商品),则您无法致电a.next
,因为a
为null
。
public String toString() {
String result = " ";
ListNode a=head;
if(a!=null){
while (a.next!=null){
result +=" "+a.item;
a=a.next;
}
result+=" "+a.item;
}
return result;
}
答案 1 :(得分:3)
假设您将next
参数初始化为null
值,当您删除最后一个节点时,head
现在将指向null
。
执行此操作时:a = head
,您将a
指定为null,因为不再有节点。当您尝试访问.next
属性时,a
将为null,因此您将获得该异常。
解决此问题:
public String toString() {
String result = " ";
ListNode a=head;
if(a != null)
{
while (a.next!=null){
result +=" "+a.item;
a=a.next;
}
result+=" "+a.item;
}
else
{
result = "List is Empty";
}
return result;
}
答案 2 :(得分:2)
那是因为你只检查head为null
的情况,如果head不为null,那么你就是要指向下一个。
如果列表中只有一个节点,那就是头部,所以当你指向下一个节点时,如果没有指向下一个节点,则会得到空指针异常。