数据结构之链表(四)

这是我参与更文挑战的第16天,活动详情查看:更文挑战

实现链表的其他方法

在之前的三节中我们已经了解到什么是链表,并且实现了链表的append方法,removeAt方法和insert方法,这一节我我们将实现LinkedList类的其他方法。

toString

toString方法会把linkedList对象转换为一个字符串。

function LinkedList () {
    // 节点类
    let Node = function (element) {
           this.element = element
           this.next = null
    }
    // 链表数量
    let length = 0 
    // 第一个节点的引用
    let head = null
    
    this.toString = function () {
        let current = head
        let string = ''
        while (current) {
            string += ',' + current.element
            current = current.next
        }
        return string.slice(1)
    }
}
复制代码

首先,我们要将一个链表转为字符串输出,就需要从头到尾开始循环链表,那么起点就是head,而用于循环的变量就是current,其初始值为head,如果current存在则将current.element拼接,并将current指向下一项即current.next,直到current不存在时跳出循环返回最终拼接的字符串

indexOf

indexOf方法接收一个元素的值,如果在列表中找到它,就返回元素的位置,否则返回-1

function LinkedList () {
    // 节点类
    let Node = function (element) {
           this.element = element
           this.next = null
    }
    // 链表数量
    let length = 0 
    // 第一个节点的引用
    let head = null
    
    this.indexOf = function (element) {
        let current = head
        let index = 0
        while (current) {
            if(current.element === element){
                return index
            }
            index++
            current = current.next
        }
        return -1
    }
}
复制代码

要比较传入的值是否存在链表中,还是需要从头到尾的循环链表,还是将current作为循环的变量初始值为head,并声明index用于标记此时找到element时的位置,初始值为0,开始循环链表,如果current存在则比较element和当前项的element是否一致,若是则返回index,若不是则将index加1同时将current指向current.next。如果current为空说明已经到列表尾部或者列表为空,循环不执行,直接返回-1

remove, isEmpty, size 和 getHead方法

在实现了之前几个方法的前提下,我们再来实现剩下的方法就简单了

function LinkedList () {
    // 节点类
    let Node = function (element) {
           this.element = element
           this.next = null
    }
    // 链表数量
    let length = 0 
    // 第一个节点的引用
    let head = null
    
    this.remove = function (element) {
        let index = this.indexOf(element)
        return this.removeAt(index)
    }
    this.Empty = function () {
        return !!length
    }
    this.size = function () {
        return length
    }
    this.getHead = function () {
        return head
    }
}
复制代码

至此,链表的所有方法我们都已经实现了。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享