链表的递归实现add方法NullPointException

来源:5-7 更多和链表相关的问题

幕布斯7429233

2019-07-15

初始化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

初始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
1
幕布斯7429233
非常感谢!
2019-07-15
共1条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程