簡體   English   中英

是否可以在Java中編寫一個遞歸方法,將列表中的所有項目都替換為最后一個元素?(不使用循環)

[英]Is it possible to write a recursive method in java where all items in a list is replaced by the last element?(without using loops)

例如,如果列表包含元素(a,b,c,d,e),則在調用該方法后,它應具有(e,e,e,e,e)

假設有一個通用方法:

public static <T> void duplicateLast(List<T> list){}

是否可以編寫一個遞歸方法,將列表中的所有項目都替換為最后一個元素,而不使用任何循環。

絕對-該方法如下:

  • 遞歸元素始終查看列表中的當前節點(有關簽名更改,請參見下面的注釋)。
  • 如果當前元素是列表中的最后一個元素,則返回其值
  • 否則,請進行遞歸調用,將從中獲取的值分配給自己的元素,然后返回相同的值。

注意:您將需要更改遞歸方法的簽名以返回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;
}

ideone上的演示。

首先:檢查列表中是否包含多個元素。 如果不是,請在此處停止。

第二:將第一個元素替換為最后一個元素。

第三:您對函數進行遞歸調用,以傳遞沒有參數中第一個元素的子列表。

就這樣。

我讓你用Java編寫代碼:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM