使用 Javascript 从双向链表中删除元素


在链表中删除一个元素非常容易。我们只需要摆脱我们要删除的节点,即失去它的引用。我们需要考虑 3 种情况 −

  • 从头部删除元素:在这种情况下,我们可以简单地赋值 head = head.next,并删除 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 <->

更新日期: 15-6 月-2020

479 次浏览

启动你的职业生涯

完成课程获取认证

开始学习
广告
© . All rights reserved.