JS数据结构和算法 ---- 双向链表、循环链表

    技术2025-08-12  10

    (一)双向链表

    通过给每一个Node对象增加一个previous属性,存储前一个节点,所以在一个双向链表中,不仅存储着上一个元素,还要存储本身和下一个元素

    (二)代码演示

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> // 定义节点 class Node { constructor(value) { this.element = value this.next = null this.previous = null } } // 双向链表 class DoubelLinkedList { constructor () { this.head = null } // 查找链表某一节点 不存在返回null find (value) { var currentNode = this.head while (currentNode && (currentNode.element !== value)) { currentNode = currentNode.next } return currentNode || null } // 末尾添加 append (value) { var node = new Node(value) if (this.head) { var current = this.head while(current.next) { current = current.next } current.next = node node.previous = current } else { this.head = node } } // 移除 remove (value) { var current = this.find(value) // 如果是head 没有previuos if (current) { if (current.previous === null) { this.head = current.next current.next.previous = null } else if (current.next === null) { // 尾部 current.previous.next = null } else { // 中间的 current.previous.next = current.next current.next.previous = current.previous } } } // 获取链表 getLinked () { return this.head } // 插入 在item后面插入value insert (value, item) { var current = this.find(item) var node = new Node(value) if (current) { node.next = current.next node.previous = current current.next = node node.next && (node.next.previous = node) } } } var linked = new DoubelLinkedList() linked.append('a') linked.append('c') linked.insert('b', 'a') linked.remove('b') console.log(linked.getLinked()) console.log(linked.find('b')) </script> </body> </html>

    (三)循环链表

    循环链表:

    在单链表的基础上,将尾节点的指针next指向头结点,就构成了一个循环链表。环形链表从任意一个节点开始,都可以遍历整个链表。

    不写代码啦

    Processed: 0.013, SQL: 9