关于删除的递归操作

关于删除的递归操作

问题描述:

老师,这段我自己写的删除递归代码我自己画了一遍流程图,感觉逻辑也是对的不知道哪里有问题,一调用就报空指针错误,能麻烦老师帮忙点明一下错误吗

相关代码:

/**
* 删除某个位置的元素
* @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);
}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

如果只有一个元素,index 应该传多少?


如果是传 0,递归的终止条件 index == 1 永远不会到达。


如果是传 1,此时只有一个元素,node.next 就是 null,但是 node.next.next 就是在调用 null.next,就是空指针异常。


请仔细理解这一小节的内容:https://class.imooc.com/lesson/1580#mid=36144


这一小节的内容不仅仅是在讲一个代码,更是在讲怎么理解递归函数,递归函数的执行过程到底是怎样的。请根据自己的程序出错的错误用例,去仔细模拟自己的代码,每一步到底都在做什么,每一步各个变量存的都是什么,和自己希望的是否一致,如果不一致,为什么不一致,自己哪里想错了?这是学习算法,乃至学习编程非常重要的步骤和过程。


继续加油!:)



  • 宇宇子 提问者 #1

    感谢老师解答,想尽量往这个宏观思想上靠结果少考虑了这两种错误!递归有时候还是感觉无从下手,我学一遍这段代码和这节课,争取理解透彻

    2021-07-28 14:32:20
  • 宇宇子 提问者 #2

    再学一遍,少打个字

    2021-07-28 14:33:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

算法与数据结构
  • 参与学习       2583    人
  • 解答问题       1082    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师