使用 Javascript 将元素插入双向链表
web developmentfront end technologyjavascript
我们需要创建一个函数 insert(data, position),用于将数据插入链表中的给定位置。我们将执行以下步骤 −
- 创建一个新节点
- 检查列表是否为空。如果为空,则将节点添加到头部和尾部并返回。
- 如果不是,则我们将使用 currElem 迭代到我们想要插入的位置。我们通过使 currElem 等于 currElem.next 来迭代链接列表。
现在我们以以下方式更改链接 −
- 使新节点指向列表中的下一个节点
- 使下一个节点的上一个节点指向新节点
- 使我们的节点指向上一个节点
- 使上一个节点的下一个节点指向新节点
最后,我们断开从 currElem 到列表其余部分的链接,并使其指向我们创建的节点。现在节点位于列表中的给定位置。
以下是相同 − 的图示
现在让我们看看如何实现这一点 −
示例
insert(data, position = this.length) { let node = new this.Node(data); this.length++; // 列表当前为空 if (this.head === null) { this.head = node; this.tail = node; return this.head; } // 在头部插入 if (position == 0) { node.prev = null; node.next = this.head; this.head.prev = node; this.head = node; return this.head; } let iter = 1; let currNode = this.head; while (currNode.next != null && iter < position) { currNode = currNode.next; iter++; } // 使新节点指向列表中的下一个节点 node.next = currNode.next; // 使下一个节点的上一个指向新节点 if (currNode.next != null) { currNode.next.prev = node; } // 使我们的节点指向上一个节点 node.prev = currNode; // 使上一个节点的下一个指向新节点 currNode.next = node; // 检查插入的元素是否在尾部,如果是,则使尾部指向它 if (this.tail.next != null) { this.tail = this.tail.next; } return node; }
请注意,我们将位置指定为最后一个元素。这是因为如果您不提供位置,它将默认插入到末尾。
您可以使用以下方法测试此操作:
示例
let list = new LinkedList(); list.insert(10); list.insert(20); list.insert(30); list.insert(15, 2); list.display();
输出
将给出输出 −
10 <-> 30 <-> 15 <-> 20 <->
我们可以看到所有元素都按照我们想要的顺序排列。我们尝试在 2 之后的位置插入 15。