猿问

关于JS中的链表

最近在看数据结构与算法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;结果就变成下图所示

https://img3.mukewang.com/5ca45ee70001ea4003150174.jpg


守候你守候我
浏览 514回答 1
1回答

ABOUTYOU

看了下你贴的代码,是你把此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;   //###########这一句是有疑惑的地方        }    }
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答