首页 > 解决方案 > 什么是导致删除双向链表中第n个节点的解决方案中的空指针异常?

问题描述

任务是删除双向链表的第 n 个节点。我把它画出来了,我没有看到让我绊倒的空指针错误。

我创建了一个 if 语句来处理空列表的边缘情况。我创建了一个while循环来遍历链表,否则。尝试设置节点链接时出现错误。详情如下。

    public double delete (int k) {

    int i = 0;
    Node temp = first;
    double retVal;

    if (k < 0 || k >= N) throw new IllegalArgumentException ();

    if (temp == null)
        return 0;

    while (temp != null) {

            if (i == k - 1) {
                temp.next = temp.next.next;
                temp.next.next.prev = temp;
                temp.next.next = null;
                temp.next.prev = null;
                return temp.next.item;
            } else {
                i++;
                temp = temp.next;
            }
        }

    return 0;

我期待删除并返回要删除的节点。相反,我在用“//Issue”注释的那一行得到了一个空指针异常。

标签: javadoubly-linked-list

解决方案


您必须检查 temp.next 和 temp.next.next 是否存在。在您的上下文中,我们可能有 1->2->3->null,您可能指的是 null。


推荐阅读