Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以用java编写一个递归方法,其中列表中的所有项都替换为最后一个元素?(不使用循环)_Java_List_Generics_Recursion - Fatal编程技术网

是否可以用java编写一个递归方法,其中列表中的所有项都替换为最后一个元素?(不使用循环)

是否可以用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(列表){ 是否可以编写一个递归方法,其中列表中的所有项都由最后一个元素替换,而不使用任何循环 绝对-方法如下: 递归元素总是查看列表中的当前节点(有关签名更改,请参见下面的注释) 如果当

例如,如果一个列表有元素(a、b、c、d、e),在调用它应该有的方法(e、e、e、e、e)之后

假设有一种通用方法:

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编写代码:-)