我正在尝试用javascript编写一个链表。我有一个类,一个构造函数和一个addtoLast 函数,它提供彼此之间的连接。
但是在addtoLast 函数中,我无法访问任何对象的">下一个"属性。
它说
无法在数字"x"上创建属性"next">
(x 作为链表的第一个值和头部(
代码是:
class LinkedList
{
constructor()
{
this.head=[];
this.next=null;
this.length=0;
}
addtoLast(value)
{
if(this.head==null)
{
this.head=value;
this.length++;
}
else
{
let now=this.head;
let newNode=value;
while(now.next!=null)
now=now.next;
now.next=newNode; //it gives that error
newNode.next=null; //and it gives too!
this.length++;
}
}
}
//and my main function is:
let example = new LinkedList();
example.head = 3;
example.addtoLast(9);
document.write(example);
我将不胜感激任何评论:)
我修复了以下问题:
-
this.head
:它不应该是一个数组(否则列表有多个头(,它应该是一个对象,并且应该用null或{value:'',next:null}
初始化。 -
let newNode={'value':value, 'next':null};
遵循与this.head
相同的规则。 -
将
example.head = 3;
更改为example.head = {'value':3, 'next':null};
PS:但是会导致列表的长度错误。 -
删除
this.next=null
,接下来应该是每个节点的一个属性。下面是一个工作示例。
class LinkedList
{
constructor()
{
this.head=null;
//this.next=null;
this.length=0;
}
addtoLast(value)
{
if(!this.head)
{
this.head={'value':value, 'next':null};
this.length++;
}
else
{
let now=this.head;
let newNode={'value':value, 'next':null};
while(now.next!=null)
now=now.next;
now.next=newNode; //it gives that error
newNode.next=null; //and it gives too!
this.length++;
}
}
}
//and my main function is:
let example = new LinkedList();
//example.head = {'value':3, 'next':null};
example.addtoLast(3);
example.addtoLast(9);
example.addtoLast(10);
console.log(example);
document.write(example);