链表

作者: Jim_Fun | 来源:发表于2019-03-23 14:25 被阅读0次

    链表存储有序的元素集合,但不同于数组,链表中的元素在内存中并不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成

    为什么使用链表

    数组的大小是固定的,从数组的起点或中间插入或移除项的成本很高,因为需要移动元素。链表的一个好处在于,添加或移除元素的时候不需要移动其他元素,因此插入一个元素的效率很高。
    数组的另一个细节是可以直接访问任何位置的任何元素,而要想访问链表中间的一个元素,需要从起点(表头)开始迭代列表直到找到所需的元素。

    实现

    class Node {
        constructor(item) {
            this.item = item;
            this.next = null;
        }
     }
     
     class LinkedList {
         constructor() {
             this.head = new Node("head");
         }
         find(item) {
             let curNode = this.head;
             while(curNode.item !== item) {
                 curNode = curNode.next;
             }
             return curNode
         }
         insert(newItem, item) {
             const newNode = new Node(newItem);
             const curNode  = this.find(item);
             newNode.next = curNode.next;
             curNode.next = newNode;
         }
         append(item) {
             const curNode = this.head;
             while(curNode.next) {
                 curNode = curNode.next;
             }
             curNode.next = item;
         }
         findPrevious(item) {
             let prevNode = this.head;
             while(prevNode.next && prevNode.next.item !== item) {
                 prevNode = prevNode.next;
             }
             return prevNode;
         }
         remove(item) {
             const prevNode = this.findPrevious(item);
             prevNode.next = prevNode.next.next;
         }
         display() {
             let curNode = this.head.next;
             while(curNode !== null) {
                 console.log(curNode.item);
                 curNode = curNode.next;
             }
         }
     }
     
    

    相关文章

      网友评论

          本文标题:链表

          本文链接:https://www.haomeiwen.com/subject/qcfmmqtx.html