关于删除的递归操作
问题描述:
老师,这段我自己写的删除递归代码我自己画了一遍流程图,感觉逻辑也是对的不知道哪里有问题,一调用就报空指针错误,能麻烦老师帮忙点明一下错误吗
相关代码:
/**
* 删除某个位置的元素
* @param index
*/
public E remove(int index) {
if (index < 0 || index > size) {
throw new IllegalArgumentException("Remobe Failed!");
}
size--;
return remove(head, index);
}
private E remove(Node node, int index) {
//基本问题就是。index为1.next跳过下一个元素
if (index == 1) {
node.next = node.next.next;
return node.next.e;
}
return remove(node.next, index-1);
}
22
收起
正在回答
1回答
如果只有一个元素,index 应该传多少?
如果是传 0,递归的终止条件 index == 1 永远不会到达。
如果是传 1,此时只有一个元素,node.next 就是 null,但是 node.next.next 就是在调用 null.next,就是空指针异常。
请仔细理解这一小节的内容:https://class.imooc.com/lesson/1580#mid=36144
这一小节的内容不仅仅是在讲一个代码,更是在讲怎么理解递归函数,递归函数的执行过程到底是怎样的。请根据自己的程序出错的错误用例,去仔细模拟自己的代码,每一步到底都在做什么,每一步各个变量存的都是什么,和自己希望的是否一致,如果不一致,为什么不一致,自己哪里想错了?这是学习算法,乃至学习编程非常重要的步骤和过程。
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星