JavaScript 数据结构(5):单链表 LinkList
2015-11-24 17:11
801 查看
/** * 单链表(LinkList) */ /* Link 链表节点 */ function Link (data) { this.data = data; this.next = null; } Link.prototype.displayLink = function(){ console.log(this.data); }; /* LinkList 单链表 */ function LinkList () { var first = null, // 链表中的第一个链结点 size = 0; return { isEmpty: function(){ // 判断链表是否为空 return first === null; }, insertFirst: function(data){ // 在表头插入一个结点 var link = new Link(data); link.next = first; first = link; size++; }, deleteFirst: function(){ // 删除表头结点 if(first !== null){ var link = first; first = first.next; size--; return link; } return null; }, search: function(key){ // 根据指定值查找结点 var current = first; while(current !== null){ if(current.data === key){ console.log('Find it!'); return current; } 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; }else{ previous.next = current.next; return current; } } 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; } } } // 测试 var list1 = new LinkList(); console.log('Empty? ' + list1.isEmpty()); console.log('-----------------------'); list1.insertFirst(1); list1.insertFirst(2); list1.insertFirst(3); list1.displayList(); console.log('-----------------------'); list1.deleteFirst(); list1.displayList(); console.log('-----------------------'); console.log('search 3: %o', list1.search(3)); console.log('search 2: %o', list1.search(2)); console.log('-----------------------'); console.log('delete 3: %o', list1.delete(3)); console.log('delete 2: %o', list1.delete(2));
相关文章推荐
- 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开发人员工具教程(二)