
上一节会更长一些双向链表结构,因此我们将在本文中介绍双向链接列表.
双向链表
双向连接的图示:
双向链表的操作与单向链表的操作类似.
仅在实现过程中,需要考虑节点之间的更多关系,因此它比单向链表更加复杂.

情况2: 链接列表中已经有3个数据代码. 您无需进行更多解析. 长度必须为+1.
该方法的相关实现:
// 正向遍历的方法
DoublyLinkedList.prototype.forwardString = function () {
var current = this.head
var forwardStr = ""
while (current) {
forwardStr += "," + current.element
current = current.next
}
return forwardStr.slice(1)
}
// 反向遍历的方法
DoublyLinkedList.prototype.reverseString = function () {
var current = this.tail
var reverseStr = ""
while (current) {
reverseStr += "," + current.element
current = current.prev
}
return reverseStr.slice(1)
}
// 实现toString方法
DoublyLinkedList.prototype.toString = function () {
return this.forwardString()
}
完成上述代码后双向链表结构,测试append方法
// 1.创建双向链表对象
var list = new DoublyLinkedList()
// 2.追加元素
list.append("abc")
list.append("cba")
list.append("nba")
list.append("mba")
// 3.获取所有的遍历结果
alert(list.forwardString()) // abc,cba,nba,mba
alert(list.reverseString()) // mba,nba,cba,abc
alert(list) // abc,cba,nba,mba

第二种情况: 将元素插入到末尾(位置===长度)
案例三: 在中间位置插入元素
测试方法
// 4.insert方法测试
list.insert(0, "100")
list.insert(2, "200")
list.insert(6, "300")
alert(list) // 100,abc,200,cba,nba,mba,300

课后思考: 代码性能可以提高一点吗?
案例二: 删除尾随元素
情况3: 删除中间的元素

测试removeAt方法
// 5.removeAt方法测试
alert(list.removeAt(0)) // 100
alert(list.removeAt(1)) // 200
alert(list.removeAt(4)) // 300
alert(list) // abc,cba,nba,mba
代码测试:
// 6.indexOf方法测试
alert(list.indexOf("abc")) // 0
alert(list.indexOf("cba")) // 1
alert(list.indexOf("nba")) // 2
alert(list.indexOf("mba")) // 3
测试代码:
// 7.remove方法测试
alert(list.remove("abc")) // abc
alert(list) // cba,nba,mba
代码测试:
// 8.测试最后四个方法
alert(list.getHead())
alert(list.getTail())
alert(list.isEmpty())
alert(list.size())
©版权归作者所有,如需转载或内容合作,请联系作者
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-151717-1.html
希望国家坚决制止美军挑衅行为
银行一年少给我100元和我一个月少给银行941元
多行不义必自毙