编辑代码

class Node {
    constructor(val) {
        this.val = val
        this.next = null
    }
}
/**
 * 操作	最大时间复杂度
    search	O(n)
    insert	O(1)
    remove/delete	O(1)
    append	O(1)
    prepend	O(1)
 */
class LinkList {
    constructor() {
        this.length = 0
        this.head = null
    }
    append(ele) {
        let node = new Node(ele)
        let current;
        if(this.head == null) { // 链表头节点为空的情况
            this.head = node
        } else {
            current = this.head
            while(current.next) { // current.next有值的情况下
                current = current.next
            }
            current.next = node
        }
        this.length++
    }
    insert(ele, point) {
        if (point >= 0 && point < this.length) {
            let node = new Node(ele)
            let current = this.head
            let index = 0
            let prev;
            if (point == 0) { // 作为头部节点插入
                node.next = current
                this.head = node
            } else {
                while(index < point) {
                    prev = current
                    current = current.next
                    index++
                }
                prev.next = node
                node.next = current
            }
            this.length++
            return true
        } else {
            return false
        }
    }
    find(ele) { // 返回ele的下标
        let current = this.head
        let idx = 0
        if(current.val == ele) {
            return 0
        }
        while(current.next) {
            if(current.val == ele) {
                return idx
            }
            idx++
            current = current.next
        }
        if(current.val == ele) {
            return idx
        }
        return -1
    }
    remove(ele) {
        const point = this.find(ele)
        let current = this.head
        // 根据下标删除
        if(point == 0) { // 头元素
           this.head = current.next
        } else {
            let idx = 0
            let prev
            while(idx < point) {
                prev = current
                current = current.next
                idx++
            }
            prev.next = current.next
        }
        this.length--
        return current.val
    }
    print() {
        let res = ''
        let current = this.head
        while(current) {
            res += current.val + (current.next ? '->' : '')
            current = current.next
        }
        return res
    }
}

let l1 = new LinkList()
l1.append('222')
l1.append('111')
l1.append('333')
l1.append('444')
l1.remove('111')
l1.insert('gggg', 0)
l1.insert('tttt', 2)
const res = l1.print()
console.log(res)
console.log(l1.find('333'))