没有返回值的add递归

来源:2-9 链表添加元素递归方法的常见问题解析

讲武德的年轻人

2022-03-02 08:37:34

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回答

liuyubobobo

2022-03-02

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


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


继续加油!:)

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


0

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2638 学习 · 1091 问题

查看课程