0
点赞
收藏
分享

微信扫一扫

javaScript链表类的封装

慎壹 2022-04-06 阅读 33
javascript
class LinkedList {
        constructor(data) {
          this.header = null;
          this.data = data;
          this.next = null;
          this.length = 0;
        }
        // 尾部插入
        append(element) {
          let newNode = new LinkedList(element);
          if (this.length == 0) {
            this.header = newNode;
          } else {
            let current = this.header;
            while (current.next) {
              current = current.next;
            }
            current.next = newNode;
          }
          this.length = this.length + 1;
        }
        toString() {
          let current = this.header;
          let str = "";
          while (current) {
            str += current.data + " ";
            current = current.next;
          }
          return str;
        }
        // 插入
        insert(position, element) {
          if (position < 0 || position >= this.length) {
            return false;
          }
          let newNode = new LinkedList(element);
          if (position == 0) {
            let oldNode = this.header;
            this.header = newNode;
            newNode.next = oldNode;
          } else {
            let current = this.header;
            for (let i = 0; i < position; i++) {
              current = current.next;
            }
            let prv = this.header;
            for (let i = 0; i < position - 1; i++) {
              prv = prv.next;
            }
            prv.next = newNode;
            newNode.next = current;
          }
          this.length = this.length + 1;
        }
        removeAt(position) {
          if (position < 0 || position >= this.length) {
            return false;
          }
          if (position == 0) {
            this.header = this.header.next;
          }
          if (position > 0 && position <= this.length - 1) {
            let current = this.header;
            for (let i = 0; i < position; i++) {
              current = current.next;
            }
            let prv = this.header;
            for (let i = 0; i < position - 1; i++) {
              prv = prv.next;
            }
            if (current.next) {
              prv.next = current.next;
            } else {
              prv.next = null;
            }
          }
          this.length = this.length - 1;
        }
        remove(element) {
          let res = -1;
          let current = this.header;
          for (let i = 0; i < this.length; i++) {
            if (current.data === element) {
              res = i;
            }
            current = current.next;
          }
          if (res != -1) {
            this.removeAt(res);
          }
        }
        upDate(position, element) {
          if (position < 0 || position >= this.length) {
            return null;
          }
          let current = this.header;
          for (let i = 0; i < position; i++) {
            current = current.next;
          }
          current.data = element;
        }
        get(position) {
          if (position < 0 || position >= this.length) {
            return null;
          }
          let current = this.header;
          for (let i = 0; i < position; i++) {
            current = current.next;
          }
          return current.data;
        }
        indexOf(element) {
          let current = this.header;
          let res = -1;
          for (let i = 0; i < this.length; i++) {
            if (current.data === element) {
              res = i;
              break;
            }
            current = current.next;
          }
          return res;
        }
      }
举报

相关推荐

0 条评论