这是我参与更文挑战的第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