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>