链表的递归实现中的remove()方法

来源:2-8 作业解析:链表的递归实现

qiti

2020-12-10 17:43:39

public E remove(int index){
if(index < 0 || index >= size)
throw new IllegalArgumentException("Remove failed. Index is illegal.");
E ret = remove(head, index);
size --;
return ret;
}

private E remove(Node node, int index){
// Head node
if (index == 0){
E ret = head.e;
head = head.next;
return ret;
}
// Nonhead node
if(index - 1 == 0){
E ret = node.next.e;
node.next = node.next.next;
return ret;
}
return remove(node.next, index - 1);
}

关于remove()方法,我用了这样一种实现方式并且通过了您的测试。我对自己的设计思路有个疑问,对于remove这种只要求返回元素E的方法,设计其私有的递归函数是不是可以不用返回Node,对Node的操作可以在方法内部完成。因此对于add()方法我也采用同样的设计。谢谢bobo老师?

写回答

1回答

liuyubobobo

2020-12-10

赞!没有问题:)


这里的核心在于,你使用的方式在遇到待删除节点的前一个节点的时候执行了删除,所以不需要返回 Node 来保证整个链表的连接了:)


继续加油!:)

1

算法与数据结构

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

2638 学习 · 1091 问题

查看课程