为了账号安全,请及时绑定邮箱和手机立即绑定

关于JS中的链表

关于JS中的链表

守候你守候我 2019-03-13 18:15:56
最近在看数据结构与算法JavaScript描述,在链表这一章遇到了点问题,问题描述如下要删除链表中的item节点,prevNode是item节点的前一个节点书中用了 prevNode.next = prevNode.next.next; 来改变链表的指向。但是我的理解是prevNode.next = item,然后试着利用prevNode.next = item.next删除链表,但是这时候的结果相当于就把链表断开了,只留下了prevNode和之前的节点。希望各路大神能解答一下疑惑,万分感谢。感谢 改名字很伤神 的指正,以下是书中的代码//Node类表示节点    function Node(element){        this.element = element;        this.next = null;    }    //LinkedList类提供了插入节点、删除节点、显示列表元素的方法以及其他一些辅助方法    function LList(){        this.head = new Node("head");  //head节点的next属性被初始化为null,当有新元素插入时,next会指向新的元素,所以这里没有修改next的值        this.find = find;        this.findPrevious = findPrevious;        this.insert = insert;        this.remove = remove;        this.display = display;    }    function find(item){        var currNode = this.head;        while(currNode.element != item){            currNode = currNode.next;        }        return currNode;    }    function insert(newElement,item){        var newNode = new Node(newElement);        var current = this.find(item);        newNode.next = current.next;        current.next = newNode;    }    //remove方法要先找到要删除item的前一个node    function findPrevious(item){        var currNode = this.head;        while(!(currNode.next==null) && (currNode.next.element!=item)){            currNode=currNode.next;        }        return currNode;    }    function remove(item){        var prevNode = this.findPrevious(item);        if(!(prevNode.next==null)){            prevNode.next = prevNode.next.next;   //###########这一句是有疑惑的地方        }    }    function display(){        var currNode = this.head;        while(!(currNode.next==null)){            console.log(currNode.next.element);  //当前下一个节点中保存的数据current.next.element            currNode = currNode.next;        }    }此时输出的结果是:但是如果我把remove()方法里面的prevNode.next = prevNode.next.next;改成prevNode.next = item.next;结果就变成下图所示
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

看了下你贴的代码,是你把此item和彼item理解混了


  function remove(item){

        var prevNode = this.findPrevious(item);

        if(!(prevNode.next==null)){

            prevNode.next = prevNode.next.next;   //###########这一句是有疑惑的地方

        }

    }

这里的item其实应该是itemName


  function remove(itemName){

        var prevNode = this.findPrevious(itemName);

        if(!(prevNode.next==null)){

            prevNode.next = prevNode.next.next;   //###########这一句是有疑惑的地方

        }

    }

所以按你的方法应该这样写


function remove(itemName){

        var item = this.find(itemName);

        var prevNode = this.findPrevious(itemName);

        if(!(prevNode.next==null)){

            prevNode.next = item.next;   //###########这一句是有疑惑的地方

        }

    }


查看完整回答
反对 回复 2019-04-03
  • 1 回答
  • 0 关注
  • 513 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号