单向链表实现:插入节点、删除节点操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //Node类:element用来保存节点上的数据,next用来保存指向下一个节点的链接。使用构造函数创建节点:
    function  Node(element)
    {
        this.element=element;
        this.next=null;
    }

    //该类的功能包括插入删除节点、在列表中查找给定的值。
    function LList()
    {
        this.head=new Node('head');//使用一个Node对象来保存该链表的头节点,head节点的next属性被初始化为null,当有新元素插入时,next会指向新的元素
        this.find=find;
        this.insert=insert;
        this.remove=remove;
        this.findPrevious=findPrevious;
        this.display=display;
    }
    //插入新节点:向链表中插入一个节点,需要修改它前面的节点(前驱),使其指向新加入的节点,而新加入的节点则指向原来前驱指向的节点

    //find方法:遍历链表,查找给定数据。如果找到数据,该方法就返回保存该数据的节点()
    function find(item)//在已知节点的后面插入
    {
        var currentNode=this.head;
        while (currentNode.element!=item)//判断item是否为我们需要查询的element
        {
            currentNode=currentNode.next;
        }
        return currentNode;
    }
    function insert(newElement,item)
    {
        var newNode=new Node(newElement);
        var current=this.find(item);
        newNode.next=item.next;
        current.next=newNode;
    }


    //从链表中删除节点: 需要找到带删除节点前面的节点,找到这个节点后,修改它的next属性,使其不再指向带删除的节点,而是指向带删除节点的下一个节点
    function findPrevious(item)
    {
        var currentNode=this.head;
        while ((currentNode.next!=null)&&(currentNode.next.element!=item))//这里的currentNode指的是被删除节点的前一个节点
        {
            currentNode=currentNode.next;
        }
        return currentNode;
    }

    //remove方法
    function remove(item)
    {
     var previousNode=this.findPrevious(item);
     if (previousNode.next.element!==null)
     {
         previousNode.next=previousNode.next.next;
     }
    }

    //display方法:显示链表中的元素
    function display()
    {
        var currentNode=this.head;
        while (currentNode.next!=null)
        {
            console.info(currentNode.next.element);
            currentNode=currentNode.next;
        }

    }
    //测试代码
    var cities=new LList();
    cities.insert("Nanjing","head");//在head元素的后面插入Nanjing
    cities.insert("Yancheng","Nanjing");//在Nanjing的后面插入Yancheng
    cities.insert("Suzhou","Yancheng");
    cities.insert("Yangzhou","Suzhou");
    cities.display();//Nanjing Yancheng Suzhou Yangzhou
    cities.remove("Yancheng");//删除Yancheng
    cities.display();//Nanjing Suzhou Yangzhou




</script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_26102281/article/details/85270711
今日推荐