当我运行以下代码时,我得到Null Pointer Exception。我无法弄清楚为什么会这样。
public class LinkedList<T> {
private Link head = null;
private int length = 0;
public T get(int index) {
return find(index).item;
}
public void set(int index, T item) {
find(index).item = item;
}
public int length() {
return length;
}
public void add(T item) {
Link<T> ptr = head;
if (ptr == null) {
// empty list so append to head
head = new Link<T>(item);
} else {
// non-empty list, so locate last link
while (ptr.next != null) {
ptr = ptr.next;
}
ptr.next = new Link<T>(item);
}
length++; // update length cache
}
// traverse list looking for link at index
private Link<T> find(int index) {
Link<T> ptr = head;
int i = 0;
while (i++ != index) {
if(ptr!=null) {
ptr = ptr.next;
}
}
return ptr;
}
private static class Link<S> {
public S item;
public Link<S> next;
public Link(S item) {
this.item = item;
}
}
public static void main(String[] args) {
new LinkedList<String>().get(1);
}
}
答案 0 :(得分:2)
new LinkedList<String>().get(1)
返回
find(1).item
find(1)
返回head
。但是head
为空,所以你要返回
null.item
这是一个空指针异常。您应该在find(index)
中检查get
是否为空。
答案 1 :(得分:0)
您永远不会在ptr
中验证null
不是find()
。