javascript 数据结构单向链表 LinkedList
首先,实现LinkedListNode,代码如下
``

export default class LinkedListNode {  constructor(value, next = null) {    this.value = value;    this.next = next;  }  toString(callback) {    return callback ? callback(this.value) : `${this.value}`;  }}

linklist 类实现

构造函数

  /**   * @param {Function} [comparatorFunction]   */  constructor(comparatorFunction) {    /** @var LinkedListNode */    this.head = null;    /** @var LinkedListNode */    this.tail = null;    this.compare = new Comparator(comparatorFunction);  }

Linklist append办法

  /**   * @param {*} value   * @return {LinkedList}   */  append(value) {    const newNode = new LinkedListNode(value);    // If there is no head yet let's make new node a head.    if (!this.head) {      this.head = newNode;      this.tail = newNode;      return this;    }    // Attach new node to the end of linked list.    this.tail.next = newNode;    this.tail = newNode;    return this;  }

delete 办法

  /**   * @param {*} value   * @return {LinkedListNode}   */  delete(value) {    if (!this.head) {      return null;    }    let deletedNode = null;    // If the head must be deleted then make next node that is differ    // from the head to be a new head.    while (this.head && this.compare.equal(this.head.value, value)) {      deletedNode = this.head;      this.head = this.head.next;    }    let currentNode = this.head;    if (currentNode !== null) {      // If next node must be deleted then make next node to be a next next one.      while (currentNode.next) {        if (this.compare.equal(currentNode.next.value, value)) {          deletedNode = currentNode.next;          currentNode.next = currentNode.next.next;        } else {          currentNode = currentNode.next;        }      }    }    // Check if tail must be deleted.    if (this.compare.equal(this.tail.value, value)) {      this.tail = currentNode;    }    return deletedNode;  }

find 办法

  /**   * @param {Object} findParams   * @param {*} findParams.value   * @param {function} [findParams.callback]   * @return {LinkedListNode}   */  find({ value = undefined, callback = undefined }) {    if (!this.head) {      return null;    }    let currentNode = this.head;    while (currentNode) {      // If callback is specified then try to find node by callback.      if (callback && callback(currentNode.value)) {        return currentNode;      }      // If value is specified then try to compare by value..      if (value !== undefined && this.compare.equal(currentNode.value, value)) {        return currentNode;      }      currentNode = currentNode.next;    }    return null;  }

reverse 办法

  /**   * Reverse a linked list.   * @returns {LinkedList}   */  reverse() {    let currNode = this.head;    let prevNode = null;    let nextNode = null;    while (currNode) {      // Store next node.      nextNode = currNode.next;      // Change next node of the current node so it would link to previous node.      currNode.next = prevNode;      // Move prevNode and currNode nodes one step forward.      prevNode = currNode;      currNode = nextNode;    }    // Reset head and tail.    this.tail = this.head;    this.head = prevNode;    return this;  }

总结,以上代码实现javascript 单向链表,代码蕴含两局部
LinkedListNode,LinkedList
其中linkedList包含如下办法
append,delete,find,reverse等办法
如果对你有帮忙请点赞!