链接列表从头部删除

时间:2014-05-15 08:15:33

标签: java data-structures linked-list

在只有一个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;
}  

有人可以指出错误在哪里吗?

3 个答案:

答案 0 :(得分:5)

如果head=head.next;为您提供null(因为没有其他商品),则您无法致电a.next,因为anull

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,那么你就是要指向下一个。

如果列表中只有一个节点,那就是头部,所以当你指向下一个节点时,如果没有指向下一个节点,则会得到空指针异常。