【js刷题:数据结构链表之设计链表】

设计链表

  • 一、题目
  • 二、题解

一、题目

在这里插入图片描述

二、题解

// 定义节点类,每个节点都有一个值和一个指向下一个节点的引用
class LinkNode{constructor(val,next){ // 构造函数,接收节点值和下一个节点的引用this.val=val       // 节点的值this.next=next     // 指向下一个节点的引用}
}// 定义链表类
var MyLinkedList = function() {this.size=0            // 链表的大小(节点数量)this.head=null         // 链表的头节点this.tail=null         // 链表的尾节点
};// 获取链表中第index个节点的值
MyLinkedList.prototype.get = function(index) {if(index < 0 || index >= this.size) return -1; // 如果索引无效,返回-1// 获取当前节点并返回其值return this.getNode(index).val;
};// 在链表头部添加一个节点
MyLinkedList.prototype.addAtHead = function(val) {const node = new LinkNode(val, this.head); // 创建新节点,其下一个节点是当前的头节点this.head = node;                           // 更新头节点为新节点this.size++;                                // 链表大小加1if(!this.tail) {                            // 如果链表为空,则新节点也是尾节点this.tail = node;}
};// 在链表尾部添加一个节点
MyLinkedList.prototype.addAtTail = function(val) {const node = new LinkNode(val, null);      // 创建新节点,下一个节点为nullthis.size++;                                // 链表大小加1if(this.tail) {                             // 如果链表不为空this.tail.next = node;                  // 当前尾节点的下一个节点是新节点this.tail = node;                       // 更新尾节点为新节点return;                                 // 结束函数执行}this.tail = node;                           // 如果链表为空,则新节点既是头节点也是尾节点this.head = node;
};// 获取链表中第index个节点
MyLinkedList.prototype.getNode = function(index) {if(index < 0 || index >= this.size) return null; // 如果索引无效,返回null// 创建虚拟头节点,其下一个节点是实际的头节点let cur = new LinkNode(0, this.head);// 移动到第index个节点while(index-- >= 0) {cur = cur.next;}return cur; // 返回目标节点
};// 在链表中的第index个位置添加一个节点
MyLinkedList.prototype.addAtIndex = function(index, val) {if(index>this.size) return;                   // 如果索引超出链表大小,不执行任何操作if(index===this.size){                        // 如果索引等于链表大小,在尾部添加节点this.addAtTail(val)return;}if(index<=0){                                 // 如果索引小于等于0,在头部添加节点this.addAtHead(val)return;}const node = this.getNode(index-1)            // 获取第index-1个节点node.next=new LinkNode(val,node.next)         // 在其后面添加新节点this.size++;                                  // 链表大小加1
};// 删除链表中第index个位置的节点
MyLinkedList.prototype.deleteAtIndex = function(index) {if(index < 0 || index >= this.size) return; // 如果索引无效,不执行任何操作if(index === 0) {                             // 如果是删除头节点this.head = this.head.next;               // 更新头节点为下一个节点// 如果删除的这个节点同时是尾节点,更新尾节点为nullif(index === this.size - 1){this.tail = this.head}this.size--;                              // 链表大小减1return;                                   // 结束函数执行}// 获取目标节点的上一个节点const node = this.getNode(index - 1);        node.next = node.next.next;                   // 跳过要删除的节点,即删除操作// 如果删除的是尾节点,更新尾节点if(index === this.size - 1) {this.tail = node;}this.size--;                                  // 链表大小减1
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/12716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欣赏一个尚未关闭的python运行时bug

这是一个语言的运行时错误&#xff0c;在linux环境&#xff0c;跨语言使用共享内存时&#xff0c;会触发。它会在python程序退出时&#xff0c;自行销毁sharedMemory&#xff0c;即便此时还有其他的进程在使用——这会让C/Python跨进程调用几乎没有办法进行。 python程序运行完…

校园科普气象站的工作原理

TH-XQ3校园科普气象站是学校为了进行气象科普教育而设立的一种特殊设施。它不仅是一个能够实时监测和记录各种气象参数的气象站&#xff0c;更是一个促进学生对气象科学兴趣和理解的重要平台。 校园科普气象站通常包括一系列的气象观测设备和相关的科普设施。这些设备包括但不限…

Ubuntu20.04调试功能包的一些报错解决办法【更新中2024.05.14】

一、Could not find a package configuration file provided by “catkin_virtualenv” 解决办法&#xff1a; sudo apt install ros-noetic-catkin-virtualenv二、 ERROR: Could not find a version that satisfies the requirement pip-tools5.1.2 (from versions: none) …

electron 使用两个页面(额外添加一个html文件)

需求&#xff1a;打开窗口 (加载本地的html页面) 并播放视频资源 环境 electron 28.1.3 electron-forge 7.2.0 思路&#xff1a;因为要加载新弹出一个窗口并播放资源&#xff0c;可以自己加载一个外部的页面或者加载一个本地的页面&#xff0c;使用本地的会好些。让electron-…

【制作100个unity游戏之26】unity2d横版卷轴动作类游戏5(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言三段攻击攻击设置只对敌人造成伤害限制可以移动攻击问题 角色连续按四下攻击&#xff0c;最后会多a一下问题&#xff1a;站在原地连续攻击野猪&#xff0c;只有第一下攻击野猪才掉血&#xff0c;后面的攻击野猪不掉血源码完结 …

深⼊理解指针(5)

目录 1. 回调函数是什么&#xff1f;1.1 使用回调函数修改 2. qsort使⽤举例2.1 使⽤qsort函数排序整型数2.2 使⽤qsort排序结构数据按年龄排序2.3 使⽤qsort排序结构数据按名字排序2.4整体代码 3. qsort函数的模拟实现3.1 整型数组的实现3.2 结构体按名字排序实现3.3 结构体按…

蓝桥杯练习系统(算法训练)ALGO-941 P0601字符删除

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 编写一个程序&#xff0c;先输入一个字符串str&#xff08;长度不超过20&#xff09;&#xff0c;再输入单独的一个字符ch&#xff0c…

java数据结构与算法(二叉树中序遍历)

前言 二叉树的中序遍历是一种特定的遍历方法&#xff0c;按照左子树、根节点、右子树的顺序进行遍历。如果二叉树为空&#xff0c;则遍历结束并返回&#xff1b;否则&#xff0c;首先递归遍历左子树&#xff0c;然后访问根节点&#xff0c;最后递归遍历右子树 实现原理 中序…

JavaScript事件监听

JavaScript事件监听是指在某个元素上监听特定事件的触发&#xff0c;并在事件触发时执行相应的函数。事件可以是用户的鼠标操作、键盘操作、页面加载等等。 在JavaScript中&#xff0c;可以使用addEventListener方法来添加事件监听器。它接受三个参数&#xff1a;事件类型、要…

第3章Spring Boot进阶,开发社区核心功能【仿牛客网社区论坛项目】

第3章Spring Boot进阶&#xff0c;开发社区核心功能【仿牛客网社区论坛项目】 前言推荐项目总结第3章Spring Boot进阶&#xff0c;开发社区核心功能1.过滤敏感词2.发布帖子3.帖子详情4.事务管理5.显示评论6.添加评论7.私信列表8.发送私信9.统一处理异常10.统一记录日志 最后 前…

如何使用ffmpeg从mp3中删除ID3音频标签图像(或元数据)

本文介绍了如何使用ffmpeg从mp3中删除ID3音频标签图像(或元数据)的处理方法&#xff0c;对大家解决问题具有一定的参考价值&#xff0c;需要的朋友们下面随着小编来一起学习吧&#xff01; 问题描述 FFMPEG确实是一个很棒的工具.我知道它可以编辑ID3标签&#xff0c;甚至可以连…

Date计算年龄:

方法一&#xff1a; Date dateSimpleDateFormat(“yyyy-MM-dd”).parse(“2000-08-19); LocalDate localDateLocalDate.now(); LocalDate localDate1date.toInstant.atZone(ZoneId.systemDefualt()).toLocalDate(); Int ageLocalDate localDate1.getYear()-LocalDate local…

照片误删如何恢复?这些方法帮你重拾回忆!

手机照片是我们记录美好时刻的重要工具。但有时我们会因为不小心或者错误操作而导致珍贵照片的丢失。那些与家人、朋友共度的美好时刻、旅途中的风景、重要的纪念日&#xff0c;一旦删除&#xff0c;就如同从记忆中抹去&#xff0c;令人惋惜不已。幸运的是&#xff0c;随着科技…

Spring AOP(概念,使用)

目录 Spring AOPAOP是什么什么是Spring AOPAOP实际开发流程1. 引入依赖2. 编写AOP程序 Spring AOP详解Spring AOP中的核心概念Spring AOP的通知类型六种类型PointCutOrder(切面优先级) Spring AOP AOP是什么 Aspect Oriented Programminig(面向切面编程)切面指的是某一类特定…

Oceanbase 4.3特性解析:用物化视图来优化复杂查询

如果你是一位数据分析师&#xff0c;需要在包含数百万行数据的数据库中频繁地检索特定信息&#xff0c;而每次这样的查询都伴随着复杂的计算&#xff0c;耗费大量时间和资源。你可以考虑采用物化视图这一功能&#xff0c;提高查询效率。 物化视图是什么&#xff1f; 物化视图…

加快推进新质生产力,利驰牵手央视栏目助推电气行业数字化

利驰成功入围《信用中国》 4月22日&#xff0c;《信用中国》栏目选题会在北京顺利举行。利驰软件(苏州)有限公司创始人令永卓受邀参加此次选题会&#xff0c;并成功入围了《信用中国》栏目&#xff0c;利驰软件借助栏目组进入品牌建设与创新的战略新征程。 《信用中国》是一档…

Java-数据库连接(JDBC小白教学)

&#xff01;文章最后附有完整代码&#xff01; 目录 &#x1f516;JDBC概述 &#x1f516;JDBC连接数据库 &#x1f516;添加数据&#xff08;insert&#xff09; &#x1f516;修改数据&#xff08;Update&#xff09; &#x1f516;删除数据&#xff08;delete&#x…

【千帆AppBuidler】零代码构建AI人工智能应用,全网都在喊话歌手谁能应战,一键AI制作歌手信息查询应用

欢迎来到《小5讲堂》 这是《千帆平台》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景创建应用平台地址随机生成快速创建应用头像应用名称应用描述…

VMware Workstation 17.5.2 Pro 发布,产品订阅模式首个重大变更

VMware Workstation 17.5.2 Pro 发布&#xff0c;产品订阅模式首个重大变更 基于 x86 的 Windows、Linux 桌面虚拟化软件 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-workstation-17/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页…

Python 全栈体系【四阶】(四十三)

第五章 深度学习 九、图像分割 3. 常用模型 3.4 DeepLab 系列 3.4.1 DeepLab v1(2015) 3.4.1.1 概述 图像分割和图像分类不一样&#xff0c;要对图像每个像素进行精确分类。在使用CNN对图像进行卷积、池化过程中&#xff0c;会导致特征图尺寸大幅度下降、分辨率降低&…