JavaScript 数据结构(6):双端链表 FirstLastList
2015-12-09 20:18
507 查看
/** * 双端链表(FirstLastList) */ /* Link 链表节点 */ function Link (data) { this.data = data; this.next = null; } Link.prototype.displayLink = function(){ console.log(this.data); }; /* FirstLastList 双端链表 */ function FirstLastList () { var first = null, // 链表中的第一个链结点 last = null, // 链表中的最后一个链结点 size = 0; return { insertFirst: function(data){ // 在表头插入一个结点 var link = new Link(data); link.next = first; first = link; if(last === null){ last = link; } size++; }, insertLast: function(data){ var link = new Link(data); if(last === null){ first = last = link; }else{ last.next = link; last = link; } size++; }, deleteFirst: function(){ // 删除表头结点 var link = null; if(size > 1){ link = first; first = first.next; size--; }else if(size == 1){ link = first; first = last = null; size--; } return link.data; }, search: function(key){ // 根据指定值查找结点 var current = first; while(current !== null){ if(current.data === key){ console.log('Find it!'); return current.data; } current = current.next; } console.log('Can not find such a Link.'); return null; }, delete: function(key){ // 根据指定值删除结点 var previous = null, current = first; while(current !== null){ if(current.data === key){ size--; console.log('Find and delete it!'); if(current === first){ first = current.next; return current.data; }else{ previous.next = current.next; return current.data; } if(current === last){ last = previous; } } previous = current; current = current.next; } console.log('Can not delete such a Link.'); return null; }, displayList: function(){ // 显示整个链表 console.log('List(first --> last):') var current = first; while(current !== null){ current.displayLink(); current = current.next; } }, size: function() { // 链表长度 return size; }, isEmpty: function(){ // 判断链表是否为空 return size === 0; } } } // 测试 var list = new FirstLastList(); list.insertLast(5); list.insertLast(6); list.insertLast(7); list.displayList(); list.insertFirst(4); list.displayList(); console.log(list.delete(6)); list.displayList(); console.log('Delete till list is empty:'); while(!list.isEmpty()){ console.log(list.deleteFirst()); }
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- [C/C++]反转链表
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享
- 如何创建对象以及jQuery中创建对象的方式
- IE8开发人员工具教程(二)