目录
一、什么是链表?
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
二、链表的封装
function linkedList(){
// 封装一个内部类
function Node(data){
this.data = data;
this.next = null;
}
// 属性,声明一个链表头和链表的长度
this.head = null;
this.length = 0;
}
三、追溯方法append(element)
向链表尾部添加一个新的项。
linkedList.prototype.append = function(data){
// 1、创建新节点
var newNode = new Node(data);
// 2、判断链表是否为空
if(this.length == 0){ //2.1 链表为空
this.head = newNode;
}else{ //2.2 链表不为空
// 找到最后一个节点
var current = this.head;
while(current.next){
current = current.next;
}
// 最后的节点的Next指向新的节点
current.next = newNode;
}
// 3、长度要加1
this.length += 1;
}
四、toString()
由于链表项使用了Node类,就需要重写继承自JavaScript对象默认的toString方法,让其只输出元素的值。
linkedList.prototype.toString = function(){
// 1、先定义变量
var current = this.head;
var listString = '';
// 将每次遍历的结果组成字符串
while(current){
listString += current.data + ' ';
// 加完一个元素后,指向下一个元素
current = current.next;
}
// 返回字符串
return listString;
}
append方法与toString方法测试
// 测试代码
// 创建linkedList
var list = new linkedList();
list.append('a');
list.append('b');
list.append('c');
list.append('d');
alert(list); // a b c d
五、inset(position, element)
向队列的特定位置插入一个新的元素。
这种方法与append不同的是,在任何一个有效的地方插入一个元素,首先需要给定的参数是位置(position)和值(data)