如何从 void 方法更改 LinkedList (Java)

How can I change a LinkedList from a void method (Java)

这看起来很简单,但我不太明白为什么它不起作用。

我想反转我的 LinkedList 中的元素,我有一个工作方法,但我不能 return 值,因为我的教授希望它是一个无效的方法。我该怎么做?

import java.util.LinkedList;
public class ListUtil {
    public static void reverse(LinkedList<String> strings) {
        LinkedList<String> reverseLinkedList = new LinkedList<>();
        for(int i = strings.size() - 1; i >= 0; i--) {
            reverseLinkedList.add(strings.get(i));
        }
        strings = reverseLinkedList;
        System.out.println(strings);
    }
}
import java.util.LinkedList;

public class ReverseTester {
    public static void main(String[] args) {
        LinkedList<String> employeeNames = new LinkedList<>();
        employeeNames.addLast("Dick");
        employeeNames.addLast("Harry");
        employeeNames.addLast("Romeo");
        employeeNames.addLast("Tom");
        
        ListUtil.reverse(employeeNames);
        System.out.println(employeeNames);
        System.out.println("Expected: [Tom, Romeo, Harry, Dick]");
    }
}

在我的 ListUtil class 中,它确实反转了列表,但没有 return 值(因为它是无效的)但我不知道如何在 ReverseTester 中设置 employeeName class.

我知道这可能非常简单,但我一生都无法弄清楚,非常感谢任何帮助。

清空并重新填充现有列表,而不是替换它。

public static void reverse(LinkedList<String> strings) {
    List<String> temp = new ArrayList<>(strings);   // Copy the contents of the original list. Pass the original list to constructor of our duplicate list.
    strings.clear();                                // Empty the original list.
    for (String e : temp)
        strings.addFirst(e);                        // Refill the original list using elements from our duplicate list.
}

或者干脆

public static void reverse(LinkedList<String> strings) {
    Collections.reverse(strings);
}

非原始 Java 对象通过引用存储,因此您不需要 return 来自 ListUtil::reverse 的任何内容。在函数中对对象所做的任何更改都将反映在 ReverseTester.java 中。发生这种情况是因为非原始 Java 对象是通过引用存储的。基本上,您的代码完全按照您的意愿行事。您创建一个 LinkedList,用项目填充它,然后反转这些项目。

不过 System.out.println(employeeNames); 你会遇到问题。因为那只会打印对象的正式名称而不是它的内容。如果你想在 Java 中打印列表的内容,你可以这样做:

for (String name : employeeNames) {
    System.out.println(t);
}

这是我的第一个回答,如果我不够清楚,请提出任何问题!