关于删除链表中的节点
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,例如List
和 Node
.
我正在编写删除列表节点的代码,但我遇到了无法解决的问题。
这是我的 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,例如List
和 Node
.