JavaScript 实现循环单链表

    function Node(data) {
        this.data = data;
        this.next = null;
    }
    function CirSingleList() {
        this.head = new Node('head');
        this.length = 0;
    }
    CirSingleList.prototype = {
        // 寻找一个节点
        findElement: function(element) {
            let head = this.head, len = this.length;
            let count = 0;
            while( (count++) !== len && head.data != element ) {
                head = head.next;
            }
            return head;
        },
        // 寻找最后一个节点
        findLastElement: function() {
            let head = this.head, len = this.length;
            let count = 0;   
            while ( (count++) !== len ) {
                head = head.next;
            }
            return head;
        },
        // 尾巴添加节点
        pushElement: function(element) {
            let newNode = new Node(element);
            let lastNode = this.findLastElement();
            lastNode.next = newNode;
            newNode.next = this.head.next;
            this.length++;
        },
        // 添加节点
        insertElement: function(item, element) {
            let head = this.head, len = this.length;
            let searchNode = this.findElement(item);
            let newNode = new Node(element);
            let lastNode = this.findLastElement();
            if (this.isEmpty()) {
                head.next = newNode;
                newNode.next = newNode;
            } else {
                if (searchNode === lastNode) {
                    this.pushElement(element);
                    return;
                } else {
                    newNode.next = searchNode.next;
                    searchNode.next = newNode;
                }
            }
            this.length++;
        },
        // 删除节点
        removeElement: function(element) {
            let head = this.head;
            let lastNode = this.findLastElement();
            let searchNode = this.findElement(element);
            if (head.next !== searchNode) {
                head = head.next;
            }
            if (head == this.head.next) {
                if (this.length == 1) {
                    this.head.next = null;
                } else {
                    this.head.next = searchNode.next;
                    lastNode.next = searchNode.next;
                }
            } else {
                head.next = searchNode.next;
            }
            this.length--;
        },
        // 判空
        isEmpty: function() {
            return this.length === 0;
        },
        // 清空
        clear: function() {
            this.head.next = null;
            this.length = 0;
        }
    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值