是否可以用java编写一个递归方法,其中列表中的所有项都替换为最后一个元素?(不使用循环)
例如,如果一个列表有元素(a、b、c、d、e),在调用它应该有的方法(e、e、e、e、e)之后 假设有一种通用方法:是否可以用java编写一个递归方法,其中列表中的所有项都替换为最后一个元素?(不使用循环),java,list,generics,recursion,Java,List,Generics,Recursion,例如,如果一个列表有元素(a、b、c、d、e),在调用它应该有的方法(e、e、e、e、e)之后 假设有一种通用方法: public static <T> void duplicateLast(List<T> list){} publicstaticvoidduplicatelast(列表){ 是否可以编写一个递归方法,其中列表中的所有项都由最后一个元素替换,而不使用任何循环 绝对-方法如下: 递归元素总是查看列表中的当前节点(有关签名更改,请参见下面的注释) 如果当
public static <T> void duplicateLast(List<T> list){}
publicstaticvoidduplicatelast(列表){
是否可以编写一个递归方法,其中列表中的所有项都由最后一个元素替换,而不使用任何循环 绝对-方法如下:
- 递归元素总是查看列表中的当前节点(有关签名更改,请参见下面的注释)
- 如果当前元素是列表中的最后一个元素,则返回其值
- 否则,进行递归调用,将从中获得的值分配给您自己的元素,并返回相同的值
T
,并使用列表迭代器而不是列表,以便您的方法同样适用于链表和数组列表
以下是您如何实现它:
static <T> T recursiveLast(ListIterator<T> iter) {
if (!iter.hasNext()) {
// It is invalid to call recursiveLast on an empty list
return null;
}
T val = iter.next();
// Base case is when hasNext() returns false
if (iter.hasNext()) {
val = recursiveLast(iter);
}
iter.previous();
iter.set(val);
return val;
}
static T recursiveLast(ListIterator iter){
如果(!iter.hasNext()){
//在空列表上调用recursiveLast无效
返回null;
}
T val=iter.next();
//基本情况是hasNext()返回false
if(iter.hasNext()){
val=递归最后一次(iter);
}
iter.previous();
iter.set(val);
返回val;
}
首先:检查列表中是否有多个元素。如果没有,就停在这里 第二:用最后一个元素替换第一个元素 第三:对传递子列表的函数执行递归调用,而不传递参数中的第一个元素 就这些 我让您用Java编写代码:-)