基于Javascript的链表数据结构
我正在尝试使用Javascript找出链表数据结构。但有一部分我无法理解基于Javascript的链表数据结构,javascript,data-structures,linked-list,Javascript,Data Structures,Linked List,我正在尝试使用Javascript找出链表数据结构。但有一部分我无法理解 function LinkedList() { var Node = function(element) { this.element = element; this.next = null; } var length = 0; var head = null; this.append = function(element) { var node = new Node(ele
function LinkedList() {
var Node = function(element) {
this.element = element;
this.next = null;
}
var length = 0;
var head = null;
this.append = function(element) {
var node = new Node(element),
current;
if (head === null) {
head = node;
} else {
current = head;
//loop the list until find last item
while (current.next) {
current = current.next
}
//get last item and assign next to node to make the link
current.next = node
}
length++;
}
this.removeAt = function(position) {
//check for out of bounds values
if (position > -1 && position < length) {
var current = head,
previous,
index = 0;
if (position === 0) {
head = current.next;
} else {
while (index++ < position) {
debugger;
previous = current;
current = current.next;
}
previous.next = current.next;
}
length--;
return current.element;
} else {
return null;
}
}
this.toString = function() {
var current = head,
string = '';
while (current) {
string = current.element;
current = current.next;
}
return string;
}
}
var list = new LinkedList();
list.append(15);
list.append(10);
list.append(11);
list.removeAt(1);
函数链接列表(){
变量节点=函数(元素){
this.element=元素;
this.next=null;
}
变量长度=0;
var头=空;
this.append=函数(元素){
var节点=新节点(元素),
现在的
if(head==null){
头部=节点;
}否则{
电流=水头;
//循环列表,直到找到最后一项
while(当前.下一个){
当前=当前。下一步
}
//获取最后一项并分配到节点旁边以创建链接
current.next=节点
}
长度++;
}
this.removeAt=功能(位置){
//检查是否存在越界值
如果(位置>-1&&位置<长度){
无功电流=水头,
以前的
指数=0;
如果(位置===0){
头=当前。下一个;
}否则{
while(索引+++<位置){
调试器;
先前=当前;
当前=当前。下一步;
}
previous.next=current.next;
}
长度--;
返回当前元素;
}否则{
返回null;
}
}
this.toString=函数(){
无功电流=水头,
字符串=“”;
while(当前){
字符串=current.element;
当前=当前。下一步;
}
返回字符串;
}
}
var list=newlinkedlist();
列表。追加(15);
列表。附加(10);
列表。附加(11);
列表。删除(1);
我不明白在运行removeAt方法时,变量current如何丢失对节点的引用。如果要创建链接列表,可以使用以下算法:-
var linkedList = function(){
this.head=null;
this.tail=null;
this.size=0;
}
linkedList.prototype.add=function(obj){
if(!this.head){
this.head=obj;
this.tail=obj;
this.size++;
return
}
this.tail.next = obj;
this.tail=obj;
this.size++;
}
请使用一些空格格式化您的代码-如果不进行格式化,很难解析代码,而且您收到帮助的可能性较小。当您说“…current失去了对节点的引用…”时,您是否在问如何/为什么删除节点?current是removeAt方法的一个局部变量,那么您到底看到了什么问题?我检查了您的代码,看起来一切正常,除了toString方法可能只返回尾部节点的内容。您是否可以添加代码来演示您看到的问题?能产生你意想不到的结果的东西?@nurdyguy是的,这是我不知道的部分get@marquezgon当您使用
previous
节点并使用previous.next=current.next
将其next设置为current.next
时,结果是previous
现在直接链接到后面的节点当前版本
。因此,您已经从列表中删除了current
。然后在函数结束时,当前
变量超出范围并被有效删除。