java自学中 2017-05-29 07:39 采纳率: 100%
浏览 1006
已采纳

java关于链表的小白疑问

// 移除链表 元素
public void remove(Object b)
{
    // TODO Auto-generated method stub
    if (size == 0)
    {
        System.out.println("链表为空,无法删除");
        return;
    }

    Node current = this.first;
    while (current != null)
    {
        if (current.element.equals(b) )//如果当前节点的元素值  为需要找的值   即为找到了 则进行下面的操作
        {
            //找到了  则进行删除 操作
            if (current == first)
            {
                current.next.prev = null;
                first = current.next;
                current.next = null;

            } else if (current == last)
            {
                current.prev.next = null;
                last = current.prev;
                current.prev = null;

            } else
            {
                current.prev.next = current.next;
                current.next.prev = current.prev;

            }
            //删除后    size减1
            size--;
            return;//删除后则可以返回,如不返回  则会出现空指针异常     因为此时current指向删除节点  在117行   
        } else
        {
            current = current.next;
        }
    }
    throw new InputMismatchException("没有您输入的元素");

}

}

请问找到元素 删除后为什么不返回就会出现空指针(空引用)异常,虽然元素已经删除 ,但是他的prev和next应该还有引用啊

  • 写回答

1条回答 默认 最新

  • engchina 2017-05-29 09:46
    关注

    找到元素后,有3种情况,
    1,该元素是第一个,
    current.next.prev = null;
    first = current.next;

    current.next = null;

    如果不return的话,第一次进入时把current.next设成null了,
    第二次再进入时,【current.next.prev = null;】=【null.prev = null;】会出空指针异常。
    2,该元素是最后一个
    current.prev.next = null;
    last = current.prev;

    current.prev = null;

    原理同1

    3,该元素不是第一个或最后一个

    如果不return的话,会陷入死循环

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献