vocus logo

方格子 vocus

樹的「平衡感」:電腦如何像走鋼索般,永遠保持 O(log n) 的完美?

更新 發佈閱讀 15 分鐘

我們在上次旅程的結尾,留下了一個巨大的懸崖:我們打造的「二元搜尋樹」(BST),這位才華洋溢的天才,卻有著「情緒不穩定」的致命缺陷。當它「心情好」(資料隨機插入)時,它會長成一座「又寬又矮」的完美金字塔,為我們提供 O(log n) 的閃電般的搜尋、新增與刪除效率。但當它「心情不好」(資料依序插入)時,它就自暴自棄,長成一根 O(n) 的「傾斜竹竿」,讓我們所有的努力瞬間退化回「鏈結串列」的龜速爬行。

這種「看運氣」的效能,在分秒必爭的運算世界中是絕對不可接受的。我們需要的,不是一個「時好時壞」的天才,而是一個「永遠可靠」的專家。我們需要的,是一棵「自平衡二元搜尋樹 (Self-Balancing Binary Search Tree)」。我們要在 BST 的「黃金法則」(左小右大)之上,再增加一條「紀律」,一條「強迫」這棵樹在「任何時候」都必須保持「又寬又矮」的鐵則。我們要在它每次「長高」時(新增節點),就立刻「檢查」它是否長歪,如果長歪了,就立刻「把它喬回來」。

這場「平衡」的革命,由兩位蘇聯數學家——Adelson-Velsky 和 Landis——在 1962 年率先發起。他們發明的結構,以他們三人的名字縮寫命名,稱為「AVL 樹」。這是人類歷史上第一個被發明的「自平衡二元搜尋樹」。它背後的機制是如此的優雅與強大,以至於在半個多世紀後的今天,它仍然是資料結構課程中,教導「平衡」藝術的完美典範。

 「完美平衡」的代價:為什麼我們不追求絕對對稱?

在設計「紀律」之前,我們必須先定義「什麼是平衡?」一個最直覺、最嚴苛的想法,就是追求「完美二元樹 (Perfect Binary Tree)」。這是一棵「強迫症」的樹,它規定「樹上的每一層,都必須被填滿」,像一個完美的等腰三角形金字塔。這看起來是最「矮」的結構,但它很快就暴露了問題:它太「僵硬」了。

想像一棵完美的、有 7 個節點的樹(1-7)。如果你想「新增」節點 8,你就必須「摧毀」整個三層結構,重新蓋一座四層樓的新金字塔。這種為了維持「完美對稱」而進行的「全域性」大搬風,會讓「新增」操作的成本高到 O(n),這完全違背了我們追求 O(log n) 的初衷。這個「完美」的理想,實際上是「最沒有效率」的。

Adelson-Velsky 和 Landis 的天才之處,在於他們意識到:我們不需要「完美」的平衡,我們只需要「足夠好 (Good Enough)」的平衡。他們要尋找的,是那個能在「結構的靈活性」與「樹的高度」之間,達成最佳妥協的「黃金甜蜜點」。他們最終發現,這條「鐵則」不必是「左右兩邊必須一樣高」,而是「左右兩邊的高度,最多只能差 1」。

 樹的「平衡感」:會計師的「±1」黃金準則

這就是 AVL 樹的核心機制:「高度平衡屬性 (Height-Balance Property)」。它為 BST 家族引入了一個全新的「會計」概念。從現在起,樹上的「每一個節點」,都必須額外儲存一個數字,這個數字叫做「平衡因子 (Balance Factor)」。這個數字的定義是:「左子樹的高度,減去,右子樹的高度」。

這條「AVL 黃金準則」就此誕生:在 AVL 樹中,「所有」節點的「平衡因子」,都必須保持在 {-1, 0, 1} 這三個數字的範圍內。

  • 0 代表:我的左子樹和右子樹「一樣高」(完美平衡)。
  • 1 代表:我的左子樹比右子樹「高 1 層」(可以接受)。
  • -1 代表:我的右子樹比左子樹「高 1 層」(也可以接受)。
  • 如果任何一個節點的平衡因子變成了 2 或 -2,就代表「平衡被打破!」[00:08:00],警報響起,樹必須立刻「修正」自己。

這個「±1」的準則,就是 AVL 找到的「甜蜜點」。它允許樹有「輕微」的不對稱,這為「新增」和「刪除」操作提供了足夠的「緩衝」空間。但它又足夠「嚴格」,絕對不允許樹的傾斜超過 1 層,從而杜絕了「竹竿」成形的任何可能性。這就像一個高明的緊身衣,既能塑形(保持矮胖),又不會緊到讓人窒息(允許彈性)。

警報響起!當「新增」打破了平衡

那麼,這個「平衡警察」是在什麼時候出動的呢?答案是:在每一次「新增」或「刪除」操作「之後」。讓我們以「新增」為例。當你插入一個新節點時(例如,在樹葉上接上一個新節點),這個「新葉子」的加入,會改變它「父節點」的高度。而父節點的高度改變,又可能改變「祖父節點」的高度...

這個「高度改變」的連鎖效應,會從「新節點」開始,沿著它的「祖先路徑」,一路「向上回溯」到「根節點」。在這條「回溯」的路徑上,我們必須「重新計算」每一個祖先的「平衡因子」。在大多數情況下,這些祖先的平衡因子可能只是從 0 變成 1 或 -1,這都在允許範圍內,樹保持了平衡。

但總有那麼一刻,當你「回溯」到某一個「祖先」節點(我們稱它為 X)時,你發現它的平衡因子,因為這次新增,剛好從 1 變成了 2(代表左邊太高),或者從 -1 變成了 -2(代表右邊太高)。BINGO!警報響起! X 就是這場「犯罪」的「第一個不平衡節點」。AVL 樹的偉大之處在於,它不需要「全域」重整,它只需要在 X 這個「犯罪現場」,進行一次「局部手術」,就能讓整棵樹「自動」恢復平衡。

家族的「乾坤大挪移」:改變平衡的「旋轉 (Rotation)」

這個「局部手術」,就是電腦科學中最優雅、最著名的操作之一:「旋轉 (Rotation)」。這是一套「乾坤大挪移」的心法,它能在「不違反 BST 黃金法則(左小右大)」的前提下,巧妙地「重組」X 節點附近的「家族階層」,把「比較高的子樹『拉上來』,比較矮的子樹『壓下去』」,從而瞬間修正 X 的平衡因子。

想像一下,節點 X 因為右邊太重(-2),即將「向右傾倒」。它的「右孩子」我們稱為 Y。Y 顯然比 X 更「高」。X 和 Y 之間的關係是「父子」。一次「左旋轉 (Left Rotation)」 的操作,就是一次「家族革命」:

  1. 「拔擢」Y:讓 Y 上升,成為這個子樹的「新根」(取代 X 的位置)。
  2. 「降級」X:讓 X 下降,成為 Y 的「左孩子」。 為什麼 X 可以成為 Y 的「左孩子」?因為根據 BST 法則,X 必定小於 Y,這完全合法!

但是,Y 原本的「左子樹」(T2) 怎麼辦?它不能跟著 Y 上升(因為 T2 裡的節點都比 Y 小,但比 X 大),也不能留在 X 身邊。這次「革命」最精妙的一步來了:Y 原本的左子樹 T2,被「過繼」給了 X,成為了 X 的「新右子樹」。這也是合法的!因為 T2 > X。就這樣,X 和 Y 互換了位置,X 的平衡因子從 -2 變回了 0,Y 的平衡因子也變成了 0,平衡... 恢復了!

犯罪現場 (一):單純的「外部」失衡 (LL 與 RR 旋轉)

「旋轉」操作本身是固定的,但「何時」使用它,取決於「犯罪現場」的樣貌。AVL 演算法就像一個老練的警探,它會分析「不平衡節點 X」與「新插入節點 N」之間的「相對路徑」,並將其歸納為四種「犯罪模式」。

第一種模式,是單純的「外部失衡」。這包含了「右-右 (Right-Right, RR)」和「左-左 (Left-Left, LL)」兩種情況。

  • RR 案:發生在「不平衡節點 X」的「右子樹」的「右孩子」身上。這就像一個人的「右臂」的「右手肘」又往「右」伸得太長,導致整個人向右倒(平衡因子 -2)。
  • LL 案:發生在「不平衡節點 X」的「左子樹」的「左孩子」身上。這就像「左臂」的「左手肘」往「左」伸得太長,導致向左倒(平衡因子 +2)。

這兩種「外部」案件,是最單純的失衡。它們的修復方式非常簡單:哪邊倒,就往反方向轉一次。

  • RR 案(向右倒):執行一次「單左旋轉 (Single Left Rotation)」。
  • LL 案(向左倒):執行一次「單右旋轉 (Single Right Rotation)」。 這個「乾坤大挪移」會立刻讓傾斜的結構恢復平穩,金字塔重新站立。

犯罪現場 (二):棘手的「內部」扭結 (LR 與 RL 旋轉)

然而,警探很快就發現了更棘手的案件。這就是「內部失衡」,或稱為「扭結 (Kink)」。這包含了「左-右 (Left-Right, LR)」和「右-左 (Right-Left, RL)」兩種情況。

  • LR 案:發生在「不平衡節點 X」的「左子樹」的「右孩子」身上。這就像一個人的「左臂」,它的「手肘」卻是往「內側(右)」彎的。這導致 X 向左倒(平衡因子 +2)。
  • RL 案:發生在「不平衡節點 X」的「右子樹」的「左孩子」身上。這是「右臂」的手肘往「內側(左)」彎,導致 X 向右倒(平衡因子 -2)。

這種「扭結」案件非常棘手。如果你試圖用「單旋轉」(例如對 LR 案做「單右旋轉」),你會發現根本沒用![00:30:22] 你只是把「扭結」從左邊移到了右邊,樹仍然是歪的。這個「手肘」問題,需要更精細的手術。

這個手術,就是「雙重旋轉 (Double Rotation)」。以 LR 案為例,你必須「分兩步走」:

  1. 第一步:『拉直手肘』。你先對「X 的子節點」(那個手肘扭到的 Y 節點)執行一次「左旋轉」。這個小旋轉,會巧妙地把「LR 扭結」案,轉化成一個我們剛剛學會的、單純的「LL 外部案」。
  2. 第二步:『扶正身體』。現在既然它已經是個標準的 LL 案了,你就再對「X 節點」執行一次「右旋轉」。 這個「先轉小孩、再轉阿公」的「雙重旋轉」,完美地解開了這個「內部扭結」。RL 案則反之,執行「先右旋、再左旋」的雙重旋轉。至此,所有四種失衡的「犯罪模式」都已告破,AVL 警察局大獲全勝。

數學的「保證書」:為什麼 AVL 樹「永遠」是 O(log n)?

我們費了這麼大的勁,設計了「平衡因子」這種會計制度,又發明了四種「旋轉」手術來應對所有突發狀況。這一切... 真的值得嗎?我們怎麼「證明」這套「±1」的規則,就「保證」了樹的高度 h 永遠是 O(log n) 呢?

這個論證非常聰明,它不問「n 個節點的樹有多高」,它反過來問:「要蓋出一棵『高度為 h』的 AVL 樹,我『最少』需要多少個節點 (N(h))?」為什麼問「最少」?因為「節點越少、樹越高」,這就是「最壞情況」——長得最像「竹竿」的(但仍合法的)AVL 樹。我們要蓋出這種「最瘦高」的樹,在 h 層的根節點,它的兩邊子樹高度必須相差 1,也就是 h-1 和 h-2。

所以,N(h)(蓋出 h 層高 AVL 樹的最小節點數) = N(h-1)(蓋出 h-1 層左子樹的最小節點數) + N(h-2)(蓋出 h-2 層右子樹的最小節點數) + 1(根節點自己)。這個 N(h) = N(h-1) + N(h-2) + 1 的遞迴公式,看起來是不是很眼熟? 它根本就是「費氏數列 (Fibonacci Sequence)」! 費氏數列是「指數級」增長的。這就證明了,你需要的「最小節點數 N」,會隨著「高度 h」呈「指數級」飆升(N ≈ φ^h)。

這太棒了!因為這反過來也證明了:「高度 h」,只會隨著「節點數 n」呈「『對數級』(log n) 緩慢增長」。h 永遠被 log n 壓制住了!這就是 AVL 樹的「數學保證書」。它向全世界宣告,O(n) 的「竹竿」惡夢,已從物理上被徹底消滅。

聖杯的代價:AVL 樹的「會計」成本

所以,我們終於找到了!「二元搜尋樹」的黃金法則,加上「AVL」的平衡紀律。Search 是 O(log n)。Insert 也是 O(log n)(O(log n) 查找 + O(log n) 回溯 + O(1) 旋轉)。Delete 同樣是 O(log n)。這就是我們踏上旅程以來,夢寐以求的「效率聖杯」。它在「搜尋」和「增刪」之間,達成了完美的 O(log n) 平衡。

但是,如同我們學到的每一課,「天下沒有白吃的午餐」。AVL 樹的「代價」是什麼? 它的代價,就是它的「紀律本身」。它是一個「嚴格的完美主義者」。為了維持「±1」的絕對平衡,它在「每一次」新增和刪除時,都必須「支付成本」:

  1. 空間成本:每一個節點,都必須額外儲存「高度」或「平衡因子」的資訊。
  2. 時間成本:每一次 Insert/Delete,都必須「回溯」到根節點,一路檢查和更新平衡因子,並且「隨時準備」進行旋轉。

這個「持續的維護成本」,雖然在 Big-O 的「漸進」尺度上(O(log n))毫不起眼,但在「真實世界」的「常數」尺度上 (c * log n),這個 c 是會拖慢速度的。AVL 的「嚴格」,讓它的「新增」和「刪除」操作,比起那些「不太在乎」平衡的樹(例如 Skip List 或「隨機 BST」)要慢上一些。

「有紀律的天才」,與「平衡」的永恆藝術

這堂課,我們見證了一位「不穩定天才」(BST) 的「成年禮」。我們為它注入了「紀律」(AVL),將它從一個「看運氣」的藝術品,鍛造成了一個「保證效能」的工業級工具。AVL 樹的發明,是資料結構史上的一座豐碑,它向我們展示了,一個看似無解的「效率衝突」,可以透過「退一步」(不追求完美平衡)和「多做一步」(引入旋轉機制)來完美化解。

這趟旅程教會我們,效率的巔峰,往往不是來自於「單一」的、最快的操作,而是來自於「系統的、持續的自我修正」。AVL 樹就像一個專業的「會計師」,它也許不是最快的(因為它很囉唆,什麼都要記帳),但它「保證」了整個公司(整棵樹)的財務(高度)「永遠」不會崩盤(退化)。

這套「平衡」的哲學,是所有現代高效能資料庫、檔案系統、網路路由器的核心。當你在享受秒開的相簿、瞬回的搜尋結果時,背後支撐著這一切的,正是 AVL 樹(或它的繼任者,如紅黑樹、B樹)的「偏執」。它們在你看不到的毫秒之間,不斷地「走鋼索」、檢查「平衡因子」,並在必要時,上演著那場優雅的「乾坤大挪移」,只為了將 O(log n) 這個「效率的承諾」,堅定不移地帶給我們。


留言
avatar-img
政大雜學筆記
2會員
42內容數
我在政大的一些紀錄
政大雜學筆記的其他內容
2025/11/05
告別一維世界的線性束縛,踏入二元搜尋樹 (BST) 的空間領域!本文從族譜的直觀比喻出發,帶您一步步理解節點、根、父子關係等 BST 核心概念。深入剖析 BST 的「黃金法則」,揭示 O(log n) 閃電搜尋的原理,以及搜尋與新增操作的優雅整合。
Thumbnail
2025/11/05
告別一維世界的線性束縛,踏入二元搜尋樹 (BST) 的空間領域!本文從族譜的直觀比喻出發,帶您一步步理解節點、根、父子關係等 BST 核心概念。深入剖析 BST 的「黃金法則」,揭示 O(log n) 閃電搜尋的原理,以及搜尋與新增操作的優雅整合。
Thumbnail
2025/11/05
探索電腦科學中「順序」的核心挑戰,從「堆疊 (Stack)」和「佇列 (Queue)」這兩種基礎的 FIFO/LIFO 模型,到結合排序陣列與鏈結串列優勢的「跳躍串列 (Skip List)」。本文將以生動的例子,解析資料結構如何支撐數位生活的運作,並引導讀者理解「機率性」資料結構的威力。
2025/11/05
探索電腦科學中「順序」的核心挑戰,從「堆疊 (Stack)」和「佇列 (Queue)」這兩種基礎的 FIFO/LIFO 模型,到結合排序陣列與鏈結串列優勢的「跳躍串列 (Skip List)」。本文將以生動的例子,解析資料結構如何支撐數位生活的運作,並引導讀者理解「機率性」資料結構的威力。
2025/11/05
本文深入探討了電腦科學中兩種核心資料結構:陣列(Array)與鏈結串列(Linked List),並從大O符號(Big-O Notation)的角度分析其效率。
2025/11/05
本文深入探討了電腦科學中兩種核心資料結構:陣列(Array)與鏈結串列(Linked List),並從大O符號(Big-O Notation)的角度分析其效率。
看更多
你可能也想看
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
期末考結束了!這學期我負責開了大二必修課:資料結構(Data Structure),雖然作業、小考都是由TA(課程助理)幫我批改,不過期中期末考都是我自己把所有的考卷改完的。總共大約是將近150份的考卷,有兩個班。而期末考的內容,其實基本上我把大部分的規則、程式碼都寫在題目裡面或者放在附錄讓同學可以
Thumbnail
期末考結束了!這學期我負責開了大二必修課:資料結構(Data Structure),雖然作業、小考都是由TA(課程助理)幫我批改,不過期中期末考都是我自己把所有的考卷改完的。總共大約是將近150份的考卷,有兩個班。而期末考的內容,其實基本上我把大部分的規則、程式碼都寫在題目裡面或者放在附錄讓同學可以
Thumbnail
請使用 C 或 Java 語言寫一副程式,此副程式對一個長度為 10 的整數陣列 A[0:9],最多花費 15 次的數值比較運算,尋找陣列中的最小值及最大值,並分別存入 Min 及 Max。(注意:請加註解說明程式碼寫法) 【103.關務】
Thumbnail
請使用 C 或 Java 語言寫一副程式,此副程式對一個長度為 10 的整數陣列 A[0:9],最多花費 15 次的數值比較運算,尋找陣列中的最小值及最大值,並分別存入 Min 及 Max。(注意:請加註解說明程式碼寫法) 【103.關務】
Thumbnail
這篇文章說明演算法的定義、特徵以及一個有趣的小知識。演算法被定義為解決問題的流程,並以機車故障為例說明。文章也列出演算法的五個特徵:輸入、有限性、明確性、有效性及輸出。最後,文章提及世界上公認的第一個演算法是歐幾裡德演算法。
Thumbnail
這篇文章說明演算法的定義、特徵以及一個有趣的小知識。演算法被定義為解決問題的流程,並以機車故障為例說明。文章也列出演算法的五個特徵:輸入、有限性、明確性、有效性及輸出。最後,文章提及世界上公認的第一個演算法是歐幾裡德演算法。
Thumbnail
上次我們提到了演算法(algorithm),它是一種解決問題的方式。但演算法只是資料結構與演算法(Data Structures and Algorithms, DSA)這個領域的一部分。今天,我們要進一步探索這個主題,了解它的核心概念。 什麼是資料結構與演算法呢?簡單來說,資料結構是用來組織和存
Thumbnail
上次我們提到了演算法(algorithm),它是一種解決問題的方式。但演算法只是資料結構與演算法(Data Structures and Algorithms, DSA)這個領域的一部分。今天,我們要進一步探索這個主題,了解它的核心概念。 什麼是資料結構與演算法呢?簡單來說,資料結構是用來組織和存
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了array之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了array之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了list之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list 在這篇文章,會從最基礎的Singly linked list開始講起。 定義
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了list之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list 在這篇文章,會從最基礎的Singly linked list開始講起。 定義
Thumbnail
本文將深入探討鏈表的核心概念,使用 JavaScript 來說明如何實現和操作鏈表(Linked List),包括 append、prepend、remove、find 和 reverse 等五大方法。
Thumbnail
本文將深入探討鏈表的核心概念,使用 JavaScript 來說明如何實現和操作鏈表(Linked List),包括 append、prepend、remove、find 和 reverse 等五大方法。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News