用JS实现单向链表

Posted 开到荼蘼223's

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用JS实现单向链表相关的知识,希望对你有一定的参考价值。

链表

链表是数据的一种存储结构,一个链表包含若干个节点,每个节点至少包含一个数据域和指针域,指针域指向下一个节点。第0个节点称为头节点,头节点中存放第一个节点的首地址,头节点中没有数据域不存放数据,只是一个指针变量,头节点之后的节点都包含两个域

  • 数据域 存放各种数据
  • 指针域 存放下一个节点的首地址
    在这里插入图片描述
    链表的分类
  • 单向链表
    每个节点都只有一个指向其下一个节点的指针域
  • 双向链表
    每个节点都有一个指向其前一个节点的指针域和指向其下一个节点的指针域
        // 定义节点类
            class Node{
                constructor(data){
                    this.data = data; //节点的数据域(数据成员)
                    this.next = null; //节点的指针域(指针成员)
                };
            };
        // 定义单向链表类
            class SingleLinked{
                constructor(){
                    this.size = 0; //记录链表中的节点个数
                    this.head = new Node('head'); //链表的头指针 记录链表的起使地址
                    this.currentNode = ''//用来记录当前节点
                };
                // 获取链表的长度
                getLength(){
                    return this.size;
                };

                // 判断链表是否为空
                isEmpty(){
                    return this.size === 0; 
                };

                // 遍历链表:不重复的访问链表每一个节点
                displayList(){
                    var list = '';
                    var currentNode = this.head; // 指向链表的头指针
                    while(currentNode);{// 若当前节点不为空 
                        list += currentNode.data;
                        currentNode = currentNode.next; // 让指针指向当前节点的下一个节点
                        if(currentNode){
                            list += '->';
                        };
                    };
                    console.log(list);
                };
                // 获取链表最后一个节点
                findLast(){
                    var currentNode = this.head; // 指向链表的头指针
                    while(currentNode.next){
                        currentNode = currentNode.next; // 指针指向当前节点的下一个节点
                    };
                    return currentNode;
                };
                //  采用尾插法给链表插入元素
                appendNode(element){
                    var currNode = this.findLast();// 找到链表的最后一个节点
                    var newNode = new Node(element);// 创建一个新的节点
                    currNode.next = newNode;
                    newNode.next = null;
                    this.size++; // 链表长度加一
                };
                // 查找节点
                findNode(element){
                    var currNode = this.head;
                    while(currNode && (currNode.data !== element)){
                        currNode = currNode.next;
                    };
                    return currNode;
                };
                // 删除节点
                removeNode(element){
                    if(!this.findNode(element)){
                        console.log('要删除的节点不存在!');
                        return;
                    };
                    if('head' === element){
                        console.log('整个链表被删除');
                    };
                };               
            };
            var slist = new SingleLinked();
            var arr = [4321,3221,1896,1288,4312,9824];
            for(var i=0;i<arr.length;i++){
                slist.appendNode(arr[i]);
            };
            slist.displayList();

在这里插入图片描述

以上是关于用JS实现单向链表的主要内容,如果未能解决你的问题,请参考以下文章

js 实现单向链表

用Java语言实现单向链表

[原创]用C++类实现单向链表的增删查和反转操作

java实现单向链表

C语言反转单向链表的代码

用golang实现的单向链表