没有返回值的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; } }
16
收起
正在回答 回答被采纳积分+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 星