JS单向链表的具体实现实例

复制代码代码如下所示:
功能linknode(_key,_value)
{
X
类列表节点类x
X
这_key关键=;
这_value价值=;
this.next = null;
}
函数链接()
{
X
只需创建一个列表类型
X
this.root =新linknode(null,null); / /根始终是一个空的节点
this.end = this.root;
}
= link.prototype
{
计数:0,
价值:功能(_key)
{
X
仅仅根据键的值来获得值值。
X
X
更改键的值
X
X
值的相应值
X
var i = this.root;
而(布尔(我= i.next))
{
如果(主要为_key)
返回值;
}
},
问题补充:功能(_key,_value)
{
X
在链接列表的结尾处添加一个节点
X
X
更改键的值
X
X
改变价值的价值
X
X
总是返回一个新的值增加。
X
var i = this.root;
而(布尔(我= i.next))
{
如果(主要为_key)
返回值= _value I.;
}
无功节点=新linknode(_key,_value);
如果(this.count = 0)
this.root.next =节点;
其他的
this.end.next =节点;
this.end =节点;
这个数+ +;
返回_value;
},
插入:功能(_key,节点)
{
X
只插入一个新的节点节点。从列表节点类
X
X
关键元素是平等_key / / /插入
X
X
只需插入元素
X
var i = this.root;
而(布尔(我= i.next))
{
如果(主要为_key)
{
var tmp = i.next;
i.next =节点;
node.next = TMP;
打破;
}
}
},
insertBefore:功能(_key,节点)
{
X
只插入一个新的节点节点。从列表节点类
X
X
关键元素是平等_key / / /插入
X
X
只需插入元素
X
var i = this.root;
而(布尔(我= i.next))
{
如果(i.next.key = _key)
{
var tmp = i.next;
i.next =节点;
node.next = TMP;
打破;
}
}
},
删除:功能(_key)
{
X
刚刚从列表类中移除
X
X
更改键的值
X
var i = this.root;

{
如果(i.next.key = _key)
{
如果(i.next.next = null)
this.end =我;
i.next = i.next.next;

this.count--;
返回;
}
}而(布尔(我= i.next))
},
存在:功能(_key)
{
X
是否有一个键检查列表
X
X
更改键的值
X
X
X
var i = this.root;
而(布尔(我= i.next))
如果(主要为_key)
返回true;
返回false;
},
RemoveAll:()函数
{
X
只是空列表类
X
this.root =新linknode(null,null);
this.end = this.root;
this.count = 0;
},
obj2str:功能(O)
{
如果(o =未定义)
{
返回;
}
var = { };
如果(typeof啊= =字符串)
回归(o.replace + / / G({ })、 1美元(更换)/()(替换)(());
如果(typeof啊= =对象)
{
如果(!O.sort)
{
为(var I o)
R.push(+我+ + this.obj2str(O {我}));
R ={+ r.join()+};
}
其他的
{
对于(var i = 0;i < o.length;i++)
R.push(this.obj2str(O {我}))
R ={+ r.join()+};
}
返回R;
}
返回o.tostring(更换)( / /:G,:);
},
GetJSON:()函数
{
X
刚刚进入JSON字符串
X
X
X
内部递归方法
我=这个;
VaR GetChild =功能(节点)
{
var;
键:。
如果(node.next!= null)
STR + =
其他的


返回字符;
};
var
如果(this.count = = 0) / /如果空表
{
根:返回 键
}
链接= GetChild(这根。下)+ } ;
加上结束
链接
链接= 数},+ this.count + };
返回链路;
},
GetArrayJSON:()函数
{
X
在JSON字符串数组格式中打开所有节点的值
X
X
X
var;
var i = this.root;
而(布尔(我= i.next))
{
链接的this.obj2str(i.value +)
}
链接的link.substr(0,link.length - 1);
链接;
返回链路;
},
排序:函数(FN)
{
X
排序列表
X
X
方法:当节点引用该方法的参数时,返回true时,返回两个列表元素的大小比较。
X
如果(FN)!= null)
{

var i = this.root;
而(布尔(我= i.next))
{
var j = this.root;
而(布尔(J = j.next))
{
如果(j.next!= null)
{
如果(fn.call(,j))
{
var关键字= J键;
var值;
关键= j.next.key J.;
J值= j.next.value;
j.next.key =关键;
j.next.value =价值;
}
}
}
this.end =我;
}

}
其他的
{

}
}
};