Java从链表递归中删除一个元素

时间:2014-03-25 01:27:57

标签: java recursion data-structures linked-list stack-overflow

对于给我的这个赋值,我应该迭代地递归地遍历大小为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);
    }
}

}

2 个答案:

答案 0 :(得分:1)

在迭代版本中,您应该在删除时传入索引。

randomList.remove(i);

在调用递归方法之前,您是否还应该重新填充链表?

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

对链接列表的Java实现不太确定。试着在那里看。有一个isEmpty()方法吗? 或者你应该尝试:

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

答案 1 :(得分:1)

它不是很难理解。当您运行程序时,堆栈区域不够,所以您有错误。

您可以尝试添加堆栈空间。

使用以下参数运行程序:

  

-Xss1280m

这意味着使用1280MB创建堆栈,您将看到如下结果:


enter image description here