JS超精简实现链表!(转)

单向链表

单向链表 百度百科:http://baike.baidu.com/view/549479.htm?fr=ala0_1

最近家里来了个高手,他是学JAVA的。正在努力跟他学习!

如果有对链表的误读,还请高手指点..小弟感激不尽。

JS实现 链表!直接上代码。

 

var createLinkList = function(){
var _this = {}, first = null;
_this.add
= function(val) {
first
= {data:val, next: first || null};//这句比较重要
}
return _this;
}

 

 

你敢相信吗?上面的代码实现了。一个单向链表!

用下面的代码,就可以使用这个单项链表.

 

var linksList = createLinkList(); // 创建一个单链表实例
linksList.add("jelle"); // 向链表添加一个元素
linksList.add("you");// 再次添加元素

 

 

当然链表不能仅仅只有 一个add方法。于是我添加了 get获取元素  del 删除元素 与 show遍历元素

 

// --- del
_this.del = function(val){
if (first.data == val){
first
= first.next;
return ;
}
var ptemp = temp = first;
for( ; temp; ptemp = temp ,temp= temp.next){

if(temp.data == val){
ptemp.next
= temp.next;
_this.length
--;
return ;
}
}
}

// --- get

_this.get
= function(){

for( var temp = first ; temp; temp= temp.next){
if(temp.data == val){
return temp
}
}


}

// ---------
_this.show = function(fn) {
for(temp=first;temp;temp=temp.next) {
fn(temp.data);
}
}

 

已经基本实现了。单链表的基本功能!看下面演示。

当前链表数据

操作方法.把数据写入下面的TEXT 使用 按钮 add 添加 del 删除 get 获取



------全部源码-----------

 

全部源码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>

</head>

<body>



<div>当前链表数据</div>
<textarea id="linkslist" style="width:500px;"></textarea>
<P>操作方法.把数据写入下面的TEXT 使用 按钮 add 添加 del 删除 get 获取</P>
<input type="text" id="linkslins_test" value="1" />
<input type=button value="add" style="width:70px; height:22px;" onClick="linksList.add(document.getElementById('linkslins_test').value);linkslist();">
<input type=button value="del" style="width:70px; height:22px;" onClick="linksList.del(document.getElementById('linkslins_test').value);linkslist();">
<input type=button value="get" style="width:70px; height:22px;" onClick="linksList.get(document.getElementById('linkslins_test').value);"><br/><br/>
<script type="text/javascript">
var createLinkList = function(){
var _this = {}, first = null;

_this.length
= 0;
_this.add
= function(val) {
first
= {data:val, next: first || null};
_this.length
++;
}

// --- del
_this.del = function(val){
if (first.data == val){
first
= first.next;
return ;
}
var ptemp = temp = first;
for( ; temp; ptemp = temp ,temp= temp.next){

if(temp.data == val){
ptemp.next
= temp.next;
_this.length
--;
return ;
}
}
}

// --- get

_this.get
= function(val){

for( var temp = first ; temp; temp= temp.next){
if(temp.data == val){
alert( temp )
}
}


}

// ---------
_this.show = function(fn) {
for(temp=first;temp;temp=temp.next) {
fn(temp.data);
}
}

return _this;
}

var linksList = createLinkList(); // 创建一个单链表实例
linksList.add("jelle"); // 向链表添加一个元素
linksList.add("you");// 再次添加元素
linksList.add(1);

function linkslist(){
var text = '';
linksList.show(
function(data){
text
+='-'+ data;
});
document.getElementById(
'linkslist').value = text;
}
linkslist();
</script>
</body>
</html>
posted on 2010-08-01 17:24  一粒沙  阅读(420)  评论(0编辑  收藏  举报