什么是链表
要存储多个元素,数组可能是最常用的数据结构。这种数据结构非常方便,但是有一个缺点:从数组的起点或者中间插入或移除项的成本非常高,因为需要移动元素(比如你插入一个元素后面的所有的元素都移动了“位置”)。链表存储有序的元素集合,但是不同于数组,链表中的元素在内存中并不是连续放置的。每个元素都是由一个存储元素本身的节点和一个指向下一元素的引用(也叫指针或者链接)组成。相比于数组来说,链表的好处在于添加或者删除元素的时候不需要移动其他元素。但是操作链表需要使用指针。数组的一个优点是可以直接访问任何位置的任何元素,但是要是想访问链表中的某一元素,则是必须从起点开始迭代直到找到目标元素。
1、创建链表
function linkedList(){//声明一个函数,此为存储链表的一个构造函数
var Node=function(element){//声明一个Node为私有变量,只有构造函数内的方法才能访问到
this.element=element;
this.next=null;
}
this.append=function(element){//构造函数模式实现的特权方法,只能是linkedList的实例可以访问
var node=new Node(element);
var current;
if(head==null){//如果为空链表
head=node;//设置head为node(列表的下一个节点的下一个元素始终为null)
}else{
current=head;//如果链表不为空,向链表得结尾处插入节点。
while(current.next){//如果链表的节点不止一个
current=current.next;//迭代查询下一个节点的下一个指针
}
current.next=node;//为当前节点的next属性,赋值为下一个节点的地址
}
length++;//链表长度加一
}
};
var list=new linkedList();//创建一个空链表
list.append(15);//向链表中添加一个节点
list.append(10);//调用append方法向链表的结尾再添加一个节点