我正在尝试在单个链表的末尾插入一个新节点。但是我在编译后继续得到NullPointerException。
这是Node类。
class Node {
private int data;
private Node next;
public Node(int x){
data = x;
next = null;
}
public int getData(){
return data;
}
public Node getNext(){
return next;
}
public void setData(int newx){
data = newx;
}
public void setNext(Node n){
next = n;
}
}
这是单个LL类
public class SingleLL {
protected Node head=null;
protected Node tail=null;
protected int size=0;
public int getSize(){
return size;
}
public void addLast(int x){
Node newnode = new Node(x);
if(size==0){
head = newnode;
}
else{
tail.setNext(newnode);
tail = newnode;
}
size = size+1;
}
public void addfirst(int x){
Node newnode = new Node(x);
if(size==0){
tail = newnode;
}
else{
newnode.setNext(head);
head = newnode;
}
size = size+1;
}
方法addFirst()有效。
当我尝试通过addLast()创建LL时,会出现NullPointerException。我认为if(size==0){head = newnode;}
一定有问题,但我无法弄明白。
public static void main(String arg[]){
int[] a = {1,2,3,4,5,6};
SingleLL myList = new SingleLL();
for(int i=0;i<a.length;i++){
myList.addLast(a[i]);
}
}
}
答案 0 :(得分:0)
在addLast
和addFirst
中,您需要在列表为空时初始化head
和tail
。否则,其中一个或另一个将永远不会被设置,并将导致您的NullPointerException
。
答案 1 :(得分:0)
// In your two add methods:
// addLast: because when size = 1, head equals tail
if(size==0){
head = newnode;
tail = head;
}
// addFirst: because when size = 1, head equals tail
if(size==0){
tail = newnode;
head = tail;
}
请记住,NullPointException仅在“。”之前发生。就像tail.setNext();让我们看看,如果size = 1,你可以调用addLast。目前,head是您添加的newnode,但tail为null。所以当它使用tail.setNext()(实际上,null.setNext())会导致NullPointException。