[Algorithm] Doubly Linked list construction
2022/8/4 6:22:57
本文主要是介绍[Algorithm] Doubly Linked list construction,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
// This is an input class. Do not edit. class Node { constructor(value) { this.value = value; this.prev = null; this.next = null; } } // Feel free to add new properties and methods to the class. class DoublyLinkedList { constructor() { this.head = null; this.tail = null; } setHead(node) { // node is the only node if (!this.head) { this.head = node this.tail = node } else { this.insertBefore(this.head, node); } } setTail(node) { if (!this.head) { this.setHead(node) } else { this.insertAfter(this.tail, node) } } insertBefore(node, nodeToInsert) { // only one node if (nodeToInsert === this.head && nodeToInsert === this.tail) { return; } this.remove(nodeToInsert); nodeToInsert.prev = node.prev; nodeToInsert.next = node; if (!node.prev) { this.head = nodeToInsert } else { node.prev.next = nodeToInsert } node.prev = nodeToInsert } insertAfter(node, nodeToInsert) { // only one node if (nodeToInsert === this.head && nodeToInsert === this.tail) { return; } this.remove(nodeToInsert); nodeToInsert.prev = node; nodeToInsert.next = node.next; if (!node.next) { this.tail = nodeToInsert } else { node.next.prev = nodeToInsert } node.next = nodeToInsert } insertAtPosition(position, nodeToInsert) { // if position = 1 if (this.position === 1) { this.setHead(nodeToInsert) } else { let current = this.head; let currentPosition = 1; while (current !== null && currentPosition !== position) { current = current.next; currentPosition++ } if (current === null) { this.setTail(nodeToInsert) } if (currentPosition === position) { this.insertBefore(current, nodeToInsert) } } } removeNodesWithValue(value) { let current = this.head; while(current) { // set it earlier const nodeToRemove = current; current = current.next; if (nodeToRemove.value === value) { this.remove(nodeToRemove) } } } remove(node) { // check head if (this.head === node) { this.head = this.head.next; } if (this.tail === node) { // check tail this.tail = this.tail.prev; } this.removeNodeBindings(node) } removeNodeBindings(node) { const prevNode = node.prev const nextNode = node.next if (prevNode) { prevNode.next = nextNode } if(nextNode) { nextNode.prev = prevNode } node.prev = null; node.next = null; } containsNodeWithValue(value) { let current = this.head; while(current !== null && current.value !== value) { current = current.next; } return current !== null; } } // Do not edit the lines below. exports.Node = Node; exports.DoublyLinkedList = DoublyLinkedList;
这篇关于[Algorithm] Doubly Linked list construction的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享