分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

原生JS实现单向链表

发布时间:2023-09-06 02:09责任编辑:郭大石关键词:暂无标签

1.前言

用JS实现一个简单的单向链表,并完成相关的功能

2.功能说明

  1. push(value):从链表尾部添加一个新的节点
  2. insertAfer(value,item):向链表中的item节点之后插入一个 值为value的新节点
  3. remove(value):删除链表中值为value的节点
  4. removeAt(pos):删除链表中第pos个节点
  5. find(value):查找链表中值为value的节点
  6. findPrevious(value):查找链表中值为value的节点的前一个节点
  7. indexof(vallue):查找链表中值为value的节点的索引值,如果查找不到则返回-1
  8. size():获取当前链表的长度
  9. getHead():获取当前链表的头节点
  10. print():打印当前链表,供测试用

3. 代码实现

3.1 创建链表类

 1 //创建一个Node辅助类,用来生成节点 2 function Node(value) { 3 ????this.value = value; 4 ????this.next = null; 5 ??} 6 ???7 //链表类 8 function LinkedList() { 9 ????this.head = null;10 ????this.length = 0;11 ????//向链表尾部追加元素12 ????this.push = push;13 ????//从链表中查找某个元素14 ????this.find = find;15 ????//在链表中任意一个元素之后插入一个元素16 ????this.insertAfter = insertAfter;17 ????//从链表中查找任意元素节点的前一个节点18 ????this.findPrevious = findPrevious;19 ????//从链表中删除值为value的元素20 ????this.remove = remove;21 ????//返回当前链表的长度22 ????this.size = size;23 ????//查找某个元素在链表中的索引值24 ????this.indexof = indexof;25 ????//删除链表中第pos个元素26 ????this.removeAt = removeAt;27 ????//获取链表中第一个元素28 ????this.getHead = getHead;29 ????//打印当前的链表,供测试用30 ????this.print = print;31 ??}

2.1 push(value):从链表尾部添加一个新的节点

function push(value) { ???var node = new Node(value); ???if (this.head == null) { ?????this.head = node; ???} else { ?????var current = this.head; ?????while (current.next != null) { ???????current = current.next; ?????} ?????current.next = node; ???} ???length++; ?}

3.3 insertAfer(value,item):向链表中的item节点之后插入一个 值为value的新节点

function insertAfter(value, item) { ???var node = new Node(value); ???var current = this.find(item); ???if (current == null) { ?????return console.log(‘找不到元素‘); ???} ???node.next = current.next; ???current.next = node; ???length++; ?}

3.4 remove(value):删除链表中值为value的节点

function remove(value) { ???var previous = this.findPrevious(value); ???var current = this.find(value); ???if (previous == null) { ?????return console.log(‘链表中找不到被删除的元素‘); ???} ???previous.next = current.next; ???length--; ?}

3.5 removeAt(pos):删除链表中第pos个节点

function removeAt(pos) { ???if (pos > -1 && pos < length) { ?????var current = this.head; ?????var index = 0; ?????if (pos === 0) { ???????this.head = current.next; ?????} else { ???????while (index < pos) { ?????????var previous = current; ?????????current = current.next; ?????????index++; ???????} ???????previous.next = current.next; ?????} ?????length--; ???} else { ?????return null; ???} ?}

3.6 find(value):查找链表中值为value的节点

function find(value) { ???var currentNode = this.head; ???if (currentNode == null) { ?????console.log("这是一个空链表!!!"); ?????return null; ???} ???if (currentNode.value === value) { ?????return currentNode; ???} ???while (currentNode.next) { ?????currentNode = currentNode.next; ?????if (currentNode.value === value) { ???????return currentNode ?????} ???} ???console.log("没有找到该元素!!!"); ???return null; ?}

3.7 findPrevious(value):查找链表中值为value的节点的前一个节点

function findPrevious(value) { ???var current = this.head; ???if (current == null) { ?????console.log(‘这是一个空链表‘); ?????return null; ???} ???while (current.next) { ?????current = current.next; ?????if (current.next.value === value) { ???????return current; ?????} ???} ???console.log(‘找不到该元素的前一个元素‘); ???return null; ?}

3.7 indexof(vallue):查找链表中值为value的节点的索引值,如果查找不到则返回-1

function indexof(value) { ???var current = this.head; ???var index = 0; ???if (current == null) { ?????return null; ???} else { ?????while (current) { ???????if (current.value === value) { ?????????return index; ???????} ???????index++; ???????current = current.next; ?????} ???} ???return -1; ?}

3.8 size():获取当前链表的长度

function size(){ ???return length; ?}

3.9 getHead():获取当前链表的头节点

function getHead(){ ???return this.head; ?}

3.10 print():打印当前链表,供测试用

function print() { ???var current = this.head; ???while (current != null) { ?????console.log(current.value); ?????current = current.next; ???} ?}

4. 功能测试

var list = new LinkedList(); ?for (var i = 1; i < 6; i++) { ???list.push(i); ?}list.print();

(完)

原生JS实现单向链表

原文地址:https://www.cnblogs.com/wangjiachen666/p/9462895.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved