JavaScript实现单链表的操作

一、链表的基础操作

1、创建一个链表结构

     

链表有几个特点:

  • 可以动态扩展空间(在js中,数组也是这样的,但是有的语言中数组的长度是固定的,不能动态添加,如c语言)
  • 需要一个头节点
  • 需要知道下一个节点的地址

    可以将链表中的每个节点看成是一个对象,这个对象中有两个属性,一个是该节点的值,一个是该节点的下一个节点的地址(如果是双链表,还要添加前一个节点地址的属性)

   2、增加节点

         

    3、删除节点

          

二、JavaScript代码实现(SingleList.js)

//节点类
class Node{  
    constructor(data){
        this.data = data; //表示节点的数据域
        this.next = null; //指针域:指向当前节点的下一个节点
    }
}
//单链表类
class SingleList {
    constructor() {
        this.size = 0; //单链表的长度
        this.head = new Node("head"); //表头节点
        this.currNode = ''; //当前节点指针
    }

    //判断链表是否为空
    isEmpty() {
        return this.size === 0;
    }
    //获取单链表的长度
    getLength() {
        return this.size;
    }
    //显示当前节点
    showNode() {
        console.log(this.currNode.data)
    }
    //遍历单链表
    displayList() {
        let result = '';
        let currNode = this.head;
        while(currNode) {
            result += currNode.data;
            currNode = currNode.next;
            if(currNode){
                result += '->';
            }
        }
        console.log(result);
    }
   
    //获取单链表的最后一个节点
    findLast() {
        let currNode = this.head; //指向头节点
        while(currNode.next) {
            currNode = currNode.next;
        }
        return currNode; //返回最后一个节点
    }
     
    //在单链表中查找item元素
    findNode(item) {
        let currNode = this.head;
        while(currNode && (currNode.data !== item)){
            currNode = currNode.next;
        }
        return currNode;
    }
    //插入节点
    insertNode(item,element) {
        let itemNode = this.findNode(item);
        if( !itemNode ){ //如果item元素不存在
            return;
        }
        let newNode = new Node(element);
        newNode.next = itemNode.next; //若currNode为最后一个节点,则currNode.next为空
        itemNode.next = newNode;
        this.size++;
    }
    //在单链表尾部添加元素
    appendNode(element) {
        let currNode = this.findLast();
        let newNode = new Node(element);
        currNode.prev = currNode.prev;
        currNode.next = newNode;
        this.size++;
    }
}
module.exports.SingleLinkList = SingleList

 三、测试代码:

var List = require('./SingleList') 

let mylist = new List.SingleList();
let arr = [67,0,24,58];
for(let i=0; i<arr.length; i++){
    mylist.appendNode(arr[i]);
}
mylist.displayList();
mylist.lastDisplay();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上庸者-不服周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值