gpt4 book ai didi

java - Java 中 LinkedList 的意外行为

转载 作者:行者123 更新时间:2023-12-01 16:44:15 25 4
gpt4 key购买 nike

我正在尝试解决 Hacker Rank 上需要使用 LinkedList 的问题,但我发现了一些奇怪的情况。目标是反向打印 LinkedList

我尝试过调试程序,但找不到任何错误。

在下面的第一段代码中,我只能将 LinkedList 的第一个和最后一个元素放入 ArrayList 中。

static void reversePrint(SinglyLinkedListNode head) {
List<Integer> tempList = null;

if (head == null)
return;
else {
tempList = new ArrayList<>();
tempList.add(head.data);
while(head.next != null)
head = head.next;
tempList.add(head.data);
}
System.out.println("Size of the List -"+tempList.size());
for(int i = tempList.size()-1; i >= 0; i--)
System.out.println("Index +"+i+" "+tempList.get(i));
}

在下面的代码中,我收到 java.lang.OutOfMemoryError: Java heap space 并且我无法理解到底是什么导致了这个错误。

static void reversePrint(SinglyLinkedListNode head) {
List<Integer> tempList = null;

if (head == null)
return;
else {
tempList = new ArrayList<>();
while(head.next != null)
tempList.add(head.data);
head = head.next;
}
tempList.add(head.data);
System.out.println("Size of the List -"+tempList.size());
for(int i = tempList.size()-1; i >= 0; i--)
System.out.println("Index +"+i+" "+tempList.get(i));
}

最佳答案

您应该始终在代码块周围使用方括号。

static void reversePrint(SinglyLinkedListNode head) { 
List tempList = null;

if (head == null)
return;
else{
tempList = new ArrayList<Integer>();
while(head.next != null) {
tempList.add(head.data);
head = head.next;
}
}
tempList.add(head.data);
System.out.println("Size of the List -"+tempList.size());
for(int i = tempList.size()-1;i>=0;i--)
System.out.println("Index +"+i+" "+tempList.get(i));

}

您的代码使得 while 循环只是一个语句:tempList.add(head.data);

进度语句head = head.next;不是循环的一部分。所以你的循环是无限的。这就是您收到 OOM 错误的原因。我只是添加了括号。

编辑:第一种方法也是如此。它不会向列表中添加任何内容 - 只是浏览链接列表(也在那里添加括号)

关于java - Java 中 LinkedList 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55776550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com