Back to Blog

資料結構:鏈結串列 (Linked List)

#什麼是鏈結串列 (Linked List)?

鏈結串列是一種線性的資料結構,它由一系列的節點 (node) 組成。每個節點都包含兩個部分:

  • 資料 (Data): 儲存節點的值。
  • 指標 (Pointer): 指向串列中的下一個節點。
graph LR
    A[Node A] -- next --> B[Node B] -- next --> C[Node C] -- next --> Null

#鏈結串列的類型

  • 單向鏈結串列 (Singly Linked List): 每個節點只包含一個指向下一個節點的指標。
  • 雙向鏈結串列 (Doubly Linked List): 每個節點包含兩個指標,一個指向上一個節點,另一個指向下一個節點。

#鏈結串列的優點和缺點

優點:

  • 動態大小: 鏈結串列的大小可以動態地增加或減少。
  • 插入和刪除容易: 在鏈結串列中插入或刪除節點非常有效率。

缺點:

  • 隨機存取不易: 無法像陣列一樣透過索引來直接存取節點,必須從頭開始遍歷。
  • 需要額外的記憶體: 每個節點都需要額外的記憶體來儲存指標。

#JavaScript 實作

class Node {
  constructor(data) {
    this.data = data;
    this.next = null;
  }
}

class LinkedList {
  constructor() {
    this.head = null;
  }

  add(data) {
    const newNode = new Node(data);
    if (!this.head) {
      this.head = newNode;
    } else {
      let current = this.head;
      while (current.next) {
        current = current.next;
      }
      current.next = newNode;
    }
  }

  print() {
    let current = this.head;
    while (current) {
      console.log(current.data);
      current = current.next;
    }
  }
}

const list = new LinkedList();
list.add(1);
list.add(2);
list.add(3);
list.print(); // 1, 2, 3