【数据结构】链表--单项循环链表

class CList {
    constructor() {
        this.head = null;
        this.length = 0;
    }
    append(element) {
        let newNode = new Node(element);
        if (this.head == null) {
            this.head = newNode;
            newNode.next = this.head;
        } else {
            let current = this.head;
            // 1
            // 2
            while (current.next != this.head) {
                current = current.next;
            }

            newNode.next = this.head;
            current.next = newNode;
        }

        this.length++
        return true;
    }

    insert(position, element) {
        // 越界判断
        if (position < 0 || position > this.length) {
            return false;
        }
        let newNode = new Node(element)
        let current = this.head;
        if (position == 0) {
            // 找到最后一个节点
            while (current.next != this.head) {
                current = current.next;
            }
            newNode.next = this.head;
            current.next = newNode;
            this.head = newNode;
        } else if (position == this.length) {
            while (current.next != this.head) {
                current = current.next;
            }

            newNode.next = this.head;
            current.next = newNode;
        } else {
            let index = 0;
            while (index++ != position - 1) {
                current = current.next;
            }
            newNode.next = current.next;
            current.next = newNode;
        }
        this.length++;
        return true;
    }

    removeAt(position) {
        // 越界判断
        if (position < 0 || position >= this.length) {
            return false;
        }
        let current = this.head;
        if (position == 0) {
            while (current.next != this.head) {
                current = current.next;
            }
            current.next = this.head.next;
            this.head = this.head.next;
        } else if (position == this.length - 1) {
            while (current.next.next != this.head) {
                current = current.next;
            }
            current.next = this.head;

        } else {
            let index = 0;
            while (index++ != position - 1) {
                current = current.next;
            }
            current.next = current.next.next;

        }
        this.length--;
        return true;
    }

    indexOf(element) {
        if (this.head.data == element) {
            return 0;
        }
        let current = this.head.next;
        let index = 1;
        while (current != this.head) {
            if (current.data == element) {
                return index;
            }
            index++;
            current = current.next;
        }
        return -1;
    }
    remove(element) {
        return this.removeAt(this.indexOf(element));
    }
}

猜你喜欢

转载自www.cnblogs.com/ljl-zszy/p/11792807.html