将null分配给链接列表中的对象会产生错误

时间:2014-12-30 20:28:48

标签: java sorting doubly-linked-list

执行此行时,我得到NullPointerException

temp.previous.next = null;

在下面的代码的最后else中。

Contact类是链接列表的节点。

任何人都可以看到问题所在吗?

public Contact delete(){
    Scanner keyboard  =new Scanner(System.in);
    Contact temp = first;
    System.out.print("Enter a name: ");
    String name = keyboard.next();
    while (temp != null) {
        if (temp.name.equalsIgnoreCase(name)) {
            break;
        }
        temp = temp.next;
    }
    if (temp == null) {
        System.out.println("record not found.");
    } else if (count == 1) {
        first = null;
        last = null;
        count--;
        return temp;
    } else if (count==2) {
        if (temp == first) {
            temp.next.previous = null;
            first = temp;
            count--;
            return temp;
        } else {
            first.next = null;
            count--;
            return temp;
        }
    } else if (count >= 3) {
        if (temp == first) {
            temp.next.previous = null;
            first = temp.next;
            count--;
            return temp;
        } else {
            if (temp.next != null) {
                temp.next.previous =temp.previous;
                temp.previous.next = temp.next;
                count--;
                return temp;
            } else {
                temp.previous.next = null; // <-- NPE here!
                count--;
                return temp;
            }
        }
    }
    return temp;
}

1 个答案:

答案 0 :(得分:3)

您要将null分配给temp.previous.next,但是您无处检查temp.previous是否为空。

此外,您使用temp初始化first,大概是(“第一个”)没有前一个节点 - 即temp.previous可能为空。

因此,您可能会NullPointerException尝试执行问题代码。

QED。