我正在使用以下代码反转单个链接列表:
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