使用堆栈可以更好地反转链表吗?

Is reversing a linked list better by using stacks?

我正在使用以下代码反转单向链表:

Node prevNode = null;
Node currNode = head;
while (currNode != null) {
    Node next = currNode.next;
    currNode.next = prevNode;
    prevNode = currNode;
    currNode = next;
}
head = prevNode;

然后,当我material 研究有关堆栈的一些内容时,它建议最好使用堆栈来反转任何列表。

肯定很容易想象我们确实弹出了元素并将它们推入一个新的堆栈,最后它基本上被逆转了。但是这两种方法哪种更好或者花费的时间更短?

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

通过反转我想这意味着在两个元素之间建立与之前相反的 链接 即如果它是 1->2->3->4 那么现在是 1<-2<-3<-4.

最好的方法 是将此列表分成两部分,即 currentrest,这是一种递归方法。

时间复杂度:O(n), Space 复杂度:O(1)

1->2->3->4


1->2->3<-4(其余为 4)


1->2<-3<-4


1<-2<-3<-4

您可以在此处找到此方法的详细信息:enter link description here