关于删除链表中的节点

Regarding deleting a node in linked list

我正在编写删除列表节点的代码,但我遇到了无法解决的问题。

这是我的 delete_node 函数:

public void delete_node(int data){
    node ptr=head;
    //if 1st node is to be Deleted
    if(ptr != null && ptr.data==data){
        head=ptr.link;
        ptr.link=null;
    }

    //line 90 below:
    while(ptr.link.data!=data){
        ptr=ptr.link;
    }

    ptr.link=ptr.link.link;

}

这是main函数:

public static void main(String[] args) {
    list o=new list();
    o.insert_beginning(1);
    o.insert_beginning(2);

    o.delete_node(2);//line 8

    o.display();

这是错误:

Exception in thread "main" java.lang.NullPointerException

    at list.delete_node(list.java:90)
    at Main.main(Main.java:8)

问题是您已到达列表末尾,但没有找到要删除的 node。基本上是尝试删除不在列表中的 node。您还可以在不检查 ptr.link 是否有效的情况下访问 ptr.link.data。这两个都可以按如下方式补救:

public void delete_node(int data){
    node ptr=head;
    if(ptr == null)
        return;
    //if 1st node is to be Deleted
    if(ptr != null && ptr.data==data){
        head=ptr.link;
        ptr.link=null;
    }

    while(ptr.link != null && ptr.link.data!=data){
        ptr=ptr.link;
    }
    if(ptr.link != null)
        ptr.link=ptr.link.link;

}

这只是检查 ptr 最初是否为 null,例如该列表是空的。它还检查 ptr.link 是否为空。


请注意,Java 中的 类 是 typically uppercase,例如ListNode.