链表的递归实现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回答
-
初始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
继续加油!:)
012019-07-15
相似问题