是否通过使用堆栈更好地反转链表?

时间:2015-08-04 12:53:47

标签: 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;

然后,当我浏览一些关于堆栈的材料时,它建议逆转任何列表最好通过使用堆栈来完成。

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

2 个答案:

答案 0 :(得分:3)

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

最佳方式这样做是将此列表分为两部分,即当前 rest ,这是一种递归方法。< / p>

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

1->2->3->4

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

1->2<-3<-4

1<-2<-3<-4

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

答案 1 :(得分:2)

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