Java 使用堆栈反转链表是否更好?

Java 使用堆栈反转链表是否更好?,java,list,stack,reverse,Java,List,Stack,Reverse,我正在使用以下代码反转单个链接列表: Node prevNode = null; Node currNode = head; while (currNode != null) { Node next = currNode.next; currNode.next = prevNode; prevNode = currNode; currNode = next; } head = prevNode; 然后,当我阅读一些关于堆栈的资料时,它建议最好使用堆栈来反转任何列

我正在使用以下代码反转单个链接列表:

Node prevNode = null;
Node currNode = head;
while (currNode != null) {
    Node next = currNode.next;
    currNode.next = prevNode;
    prevNode = currNode;
    currNode = next;
}
head = prevNode;
然后,当我阅读一些关于堆栈的资料时,它建议最好使用堆栈来反转任何列表


可以肯定的是,很容易想象我们确实弹出了元素,并将它们推到一个新的堆栈中,最后基本上是相反的。但这两种方法中哪一种更好或花费的时间更少?

就地反转总是比使用堆栈好,因为我们不使用任何额外的空间。但是,对于不可变列表,反转的唯一选项是也使用堆栈。

就地反转总是比使用堆栈好,因为我们没有使用任何额外的空间。然而,对于一个不可变的列表,唯一的反转选项是使用堆栈。通过反转,我想这意味着使两个元素之间的链接与以前相反,即如果它是
1->2->3->4
,那么它现在是
14



1->2->32通过反转,我猜这意味着使两个元素之间的链接与以前相反,即如果是
1->2->3->4,那么现在是
14



1->2->32一个使用O(1)个额外空间,另一个使用O(n)个额外空间。你决定哪个更好。O(1)肯定会更好。但是,仅仅由于易于可视化,是否建议使用堆栈来更好地反转?行业标准方法是使用
Collections.reverse()
。为了练习,我们推荐所有能教你东西的东西。所以两者都要做,学习更多:)有趣。肯定会实现堆栈反转链表:)在编写代码时小心不要“过度优化”。现在机器的性能已经足够了,我们不需要按每一个最后的周期。。。代码的可读性也有优点——如果这样做的影响是让例程对另一个开发人员不那么明显,那么我不会编写稍微快一点的例程……一个使用O(1)额外的空间,另一个使用O(n)额外的空间。你决定哪个更好。O(1)肯定会更好。但是,仅仅由于易于可视化,是否建议使用堆栈来更好地反转?行业标准方法是使用
Collections.reverse()
。为了练习,我们推荐所有能教你东西的东西。所以两者都要做,学习更多:)有趣。肯定会实现堆栈反转链表:)在编写代码时小心不要“过度优化”。现在机器的性能已经足够了,我们不需要按每一个最后的周期。。。代码的可读性也有其优点——如果这样做的影响是使例程对其他开发人员不那么明显,那么我不会编写一个稍微快一点的例程。。。