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

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,则现在是1<-2<-3<-4

最好的方法是将此列表分为两部分,即当前部分和其余部分,这是一种递归方法。

时间复杂度: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

10-07 16:29