如何删除带有指针的 Prototype 对象?

How to delete a Prototype object with a pointer to it?

我一直在编写 JavaScript 中的单向链表。 我的结构是:

function node(x)
{
    this.x=x;
    this.next=null;
}

function sl()  //sl-singly linked list
{
    this.first=null;
    this.l=0; //length of list
} 

哪里有问题:

删除最后一个方法:

sl.prototype.deletel=function()
{
    if(this.first)
    {
        var t=this.first;
        while(t.next)
            t=t.next;
        if(t)
            t=null;
    }
}

即使我将指向最后一个元素的指针设为空,仍然会打印最后一个节点。 我附上了工作片段。操作:

生成列表:01234
调用删除最后...
预期输出:0123
我得到的是:01234

function node(x)
{
 this.x=x;
 this.next=null;
}

function sl()
{
 this.l=0;
 this.first=null;
}

sl.prototype.insertl=function(x)
{
 var newnode=new node(x);
 var t=this.first;
 if(!this.first)
  this.first=newnode;
 else
 {
  while(t.next)
   t=t.next;
  t.next=newnode;
 }
 l++;
}

sl.prototype.deletel=function()
{
 if(this.first)
 {
  var t=this.first;
  while(t.next)
   t=t.next;
  if(t)
   t=null;
 }
}

sl.prototype.console=function()
{
 var t=this.first;
 while(t)
 {
  document.write(t.x);
  t=t.next;
 }
}
sl();
sl.prototype.insertl(0);
sl.prototype.insertl(1);
sl.prototype.insertl(2);
sl.prototype.insertl(3);
sl.prototype.insertl(4);
sl.prototype.deletel();
alert("check");
sl.prototype.console();

Even though I made the pointer to the last element null

不,你没有。 JavaScript 中没有指针。 t 只不过是一个局部变量,您确实将其设置为 null,但您没有更改任何对象的 属性。但是,您确实需要使倒数第二个节点的 .next 属性 无效:

sl.prototype.deletel = function() {
    var t = this.first;
    if (t) {
        var n = t.next;
        if (n) {
            while (n.next) {
                t = n;
                n = n.next;
            }
            t.next = null; // remove last node from second-to-last
        } else {
            this.first = null; // remove last node from list
        }
    }
};