這個算法的複雜性是什麼?我假設它是O(N),但我想要一些澄清。 如果我在鏈表中有一個尾部,我會認爲這會更快,因爲我完全避免讓while(current!= null)循環循環到列表的末尾。這個反向單鏈表算法的複雜性?
public void reverse() {
Stack<Node> stack = new Stack<Node>();
if (this.head != null || this.head.next != null) {
Node current = this.head;
while (current != null) {
stack.push(current);
current = current.next;
}
Node last = null;
while (!stack.empty()) {
if (last==null) {
this.head = stack.pop();
last = this.head;
continue;
}
last.next = stack.pop();
last = last.next;
if (stack.empty()) {
last.next = null;
}
}
}
}
你應該問一個明確的問題,告訴我們你期望的答案。 – SDwarfs 2012-08-16 22:13:50
我重新編輯它,但基本上我問這個算法的運行時間複雜度是什麼 – volk 2012-08-16 22:15:06
是的,它是O(n * constant),它是O(n),假設java堆棧push和pop是O(1),恰好是這種情況。你的空間複雜度也是O(n),並且在空間複雜度O(1)中有辦法做到這一點。 – hatchet 2012-08-16 22:24:30