使用 Javascript 從雙向連結串列中刪除元素


在連結串列中刪除元素非常簡單。我們只需要去除我們想要刪除的節點,即失去對其的引用。我們需要考慮三種情況:

  • 從頭部刪除元素:在這種情況下,我們可以簡單地賦值 head = head.next 並從下一個元素中刪除前一個連結。這樣,我們將失去第一個元素的引用。並且我們的頭部將開始指向第二個元素。
  • 從尾部刪除元素:在這種情況下,我們可以簡單地將倒數第二個節點的 node.next 賦值為 null,這樣我們將從列表中刪除最後一個元素。我們還更新尾部以指向當前節點。
  • 從中間刪除元素:這比較棘手。在這種情況下,我們將不得不使我們要刪除的節點之前的節點直接指向我們要刪除的節點之後的節點。因此,prevNode.next = node.next 和 node.next.prev = prevNode 將為我們完成此操作。

現在讓我們看一個示例:

現在讓我們看看我們將如何實現它:

示例

remove(data, position = 0) {
   if (this.length === 0) {
      console.log("List is already empty");
      return;
   }
   this.length--;
   let currNode = this.head;
   if (position <= 0) {
      this.head = this.head.next;
      this.head.prev = null;
   }
   else if (position >= this.length - 1) {
      this.tail = this.tail.prev;
      this.tail.next = null;
   }
   else {
      let iter = 0;
      while (iter < position) {
         currNode = currNode.next;
         iter++;
      }
      currNode.next = currNode.next.next;
      currNode.next.prev = currNode;
   }
   return currNode;
}

示例

您可以使用以下方法進行測試:

let list = new LinkedList();
list.insert(10);
list.insert(20);
list.insert(30);
list.remove(1);
list.display();
list.insert(15, 2);
list.remove();
list.display();

輸出

這將給出以下輸出:

20 <->
30 <->
30 <->
15 <->

更新於: 2020-06-15

477 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告