没有返回值的add递归

没有返回值的add递归

bobo老师好,我在做作业时,用最开始的LinkedList类中的add函数实现了递归。虽然这个add函数也没有返回值,但是测试了几个例子都通过了。


我的思路是,在调用递归函数add(index - 1, e)之前,先保存第一个结点dummy.next的信息。调用完成后,再把这个结点连接回去。


我想程序通过的原因应该是,程序里加入了dummyHead的结点,这样调用完add(index - 1, e)这个函数后,dummyHead还能保存下一个结点的位置信息。不知道这样的理解是否正确?谢谢!

public void add(int index, E e) { 
    if (index < 0 || index > size) {
         throw new IllegalArgumentException("Add failed. Illegal index"); } 
         
    if (index == 0) { 
        dummyHead.next = new Node(e, dummyHead.next); 
        size ++; 
    } else { 
    // 思路: 去除并保存第一个元素 
    Node removed = dummyHead.next;
    dummyHead.next = dummyHead.next.next;
    add(index - 1, e); 
    // 恢复第一个元素
    removed.next = dummyHead.next; 
    dummyHead.next = removed; 
    } 
  }


正在回答 回答被采纳积分+1

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

1回答
liuyubobobo 2022-03-02 18:10:58

代码是正确的。但实际上,如果函数参数添加一个 Node 的话,并不需要 removed 就能完成没有返回值的 add 添加。请看这位同学的代码:https://class.imooc.com/course/qadetail/278678


这一小节我想要强调的重点不是 add 的递归函数必须有返回值,而是视频中展示的那个代码为什么是错误的。这个问题到学习树相关的小节,你还会看到,届时对于树中节点的添加,我会写没有返回值和有返回值两个版本的:)


继续加油!:)

https://class.imooc.com/course/qadetail/278678


问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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