请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

链表的递归实现add方法NullPointException

初始化head为空,添加第一个元素node.next会触发空指针异常。

问题代码:Optional-01-Recursive-LinkedList 工程

在链表的index(0-based)位置添加新的元素e
public void add(int index, E e){

    if(index < 0 || index > size)
        throw new IllegalArgumentException("Add failed. Illegal index.");

    head = add(head, index, e);
    size ++;

}

// 在以node为头结点的链表的index位置插入元素e,递归算法
public Node add(Node node,int index,E e){
    if(index == 0){
        **// 初始化head为空,添加第一个元素node.next会触发空指针异常。**
        return new Node(e,node.next);
    }

    node.next = add(node,index - 1, e);

    return node;
}

正在回答

1回答

liuyubobobo 2019-07-15 14:10:51

初始head为空。


所以调用:head = add(head, index, e);传入add的head为空


所以 return new Node(e,node.next); node为空。


node为空,调用node.next抛异常。


所以,在没有虚拟头节点的情况下,对立案表头的修改要单独讨论。递归非递归都是如此。


==========


在这个课程官方代码的补充代码中,我实现了一版链表的递归实现,可以参考。传送门:https://github.com/liuyubobobo/Play-with-Data-Structures/blob/master/05-Recursion/Optional-01-Recursive-LinkedList/src/LinkedListR.java


继续加油!:)

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信