簡體   English   中英

Java從鏈表遞歸中刪除一個元素

[英]Java remove an element from linked list recursion

對於給我的這個賦值,我應該迭代地和遞歸地遍歷大小為1,000,000的鏈表。 我有迭代部分,但我對遞歸部分感到困惑。 我有這個概念,但我告訴我的老師,我不能遞歸地做,因為我不可避免地會出現堆棧溢出錯誤。 他說我不應該得到那個問題,但我完全陷入困境。 任何提示都會很棒,因為我不知道我做錯了什么。

public static void main(String[] args) {

    System.out.println("Please enter how many random numbers you want to generate: ");
    Scanner prompt = new Scanner(System.in);
    int amount = prompt.nextInt();

    Random rnd = new Random();
    System.out.println("Creating list...");
    for (int i = 0; i < amount; i++) {
        randomList.add(rnd.nextInt(100));
    }
    System.out.println("Going through list...");
    iterateNumbers();

    long startTimeRec = System.nanoTime();
    recursiveNumbers(randomList);
    long elapsedTimeRec = System.nanoTime() - startTimeRec;
    double seconds = (double)elapsedTimeRec / 1000000000.0;
    System.out.println("Recursively, the function took " + seconds + " seconds.");

    prompt.close();

}
//create the linked list
public static LinkedList<Integer> randomList = new LinkedList<Integer>();

private static void iterateNumbers() {

    long startTime = System.nanoTime();
    for (int i = 0; i < randomList.size(); i++) {
        randomList.remove();
    }
    long elapsedTime = System.nanoTime() - startTime;
    double seconds = (double)elapsedTime / 1000000000.0;
    System.out.println("Iteratively, the function took " + seconds + " seconds.");
}

private static void recursiveNumbers(LinkedList<Integer> current) {     

    if (current.isEmpty() == true) {
        return;
    } else {
        current.removeFirst();
        recursiveNumbers(current);
    }
}

}

在迭代版本中,您應該在刪除時傳入索引。

randomList.remove(i);

在調用遞歸方法之前,您是否還應該重新填充鏈表?

    for (int i = 0; i < amount; i++) {
    randomList.add(rnd.nextInt(100));
}

不太確定鏈接列表的Java實現。 試着在那里看。 有一個isEmpty()方法嗎? 或者你應該嘗試:

if(current.size() < 1) 
    return;

這不是很難理解。 當您運行程序時,堆棧區域是不夠的,所以您有一個錯誤。

您可以嘗試添加堆棧的空間。

使用以下參數運行程序:

-Xss1280m

這意味着用1280MB創建堆棧,你會看到如下結果:


在此輸入圖像描述

暫無
暫無

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

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