最近在准备校招,又拾起了数据结构……希望能早点找到心仪的工作嘻嘻
创建单链表首先要有节点,节点包含两部分,一部分存储数据,一部分存储指向下一个节点的链接。
节点可以用一个类来表示:
function Node(data){
this.data = data; //数据
this.next = null; //链接
}
还需要一个链表类来表示链表的一些属性及方法:(包含一个属性,即头节点,标记链表的开始)
function List(){
this.head = new Node("head"); //创建一个头节点
this.addFirst = addFirst; //从头部插入一个节点,从而创建链表
this.display = display; //显示链表的数据
this.listReverse = listReverse; //倒序单链表
}
//从链表头部插入一个节点,newEle是新节点的数据
function addFirst(newEle){
var newNode = new Node(newEle);
//如果链表为空,则直接加在头节点后面
if(this.head.next === null){
this.head.next = newNode;
}else{//如果链表不为空,则在头节点与第一个节点之间插入新节点
var first = this.head.next;
newNode.next = first;
this.head.next = newNode;
}
}
//倒序单链表,将原链表中的节点从头部开始一个个删除并加到新链表中,最后返回新链表
function listReverse(){
var reverseList = new List(); //创建一个新链表存放倒序后的链表
var currNode = this.head.next; //得到头节点后面的一个节点
while(currNode !== null){ //链表不为空
this.head.next = currNode.next; //删除原链表中的第一个节点
//将删除的节点加到新链表的头节点的后面
currNode.next = reverseList.head.next;
reverseList.head.next = currNode;
//将当前节点指向原链表中的第一个节点(即头节点的后面一个节点)
currNode = this.head.next;
}
return reverseList; //返回新链表
}
//显示
function display(){
var currNode = this.head;
while(currNode.next !== null){
console.log(currNode.next.data);
currNode = currNode.next;
}
}
测试:
//创建一个链表并向其中添加节点
var list = new List();
list.addFirst('fj');
list.addFirst('luv');
list.addFirst('wp');
//显示
list.display();
结果:
倒序链表:
list.display.call(list.listReverse());
结果: