【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.hqwc.cn/news/702811.html

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

相关文章

视频号视频怎么下载?推荐视频号下载助手机器人工具

本文今天要讲视频号视频怎么下载相关内容&#xff0c;文章中使用了视频号下载助手机器人&#xff0c;建议了解一下。 什么是视频号下载助手机器人? 视频号本身不具备视频下载功能&#xff0c;在微信平台随者软件不断的更新迭代微信视频号早已不在有复制视频号链接功能。 故…

1060 爱丁顿数(测试点5)

solution1&#xff08;测试点5不通过&#xff09; 所谓“E天骑行超过E公里”&#xff0c;注意没有要求是第E天 对于直接判断变成了第E天骑行距离超过E公里&#xff0c;曲解了题意 例如对于 3 1 2 3输出为1 第1天骑行3公里&#xff0c;满足条件&#xff1b;第2天骑行2公里&…

【CTF MISC】XCTF GFSJ0513 pdf Writeup(PDF隐写)

pdf 菜猫给了菜狗一张图&#xff0c;说图下面什么都没有 解法 打开 pdf&#xff0c;只看见一张图片。 用浏览器搜索 flag&#xff0c;发现图片中间藏了一行字。 复制出来&#xff0c;得到 flag。 Flag flag{security_through_obscurity}声明 本博客上发布的所有关于网络攻…

用HAL库改写江科大的stm32入门例子4-1 OLED

大体 步骤&#xff1a; step1&#xff1a;使用STM32CubeMX初始化I2C1&#xff0c;生成初始化代码 step2&#xff1a;将任意一个库导入到工程&#xff0c;配置好编译路径 step3&#xff1a;调用函数即可 IIC原理图&#xff1a; 接线图&#xff1a; 先设置clock&#xff1a; 开…

MHD、MQA、GQA注意力机制详解

MHD、MQA、GQA注意力机制详解 注意力机制详解及代码前言&#xff1a;MHAMQAGQA 注意力机制详解及代码 前言&#xff1a; 自回归解码器推理是 Transformer 模型的 一个严重瓶颈&#xff0c;因为在每个解码步骤中加 载解码器权重以及所有注意键和值会产生 内存带宽开销 下图为三…

如何快速找出文件夹里的全部带有中文纯中文的文件

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 步骤 1、打开工具&#xff0c;切换到批量复制文件 2、鼠标移到右侧&#xff0c;点击搜索添加 3、设定查找范围、指定为文件、勾选 包含全部子文件夹&#x…

vue 点击平滑到指定位置并绑定页面滑动效果

1.html元素 写出对应的数据块&#xff08;注意添加ref) 用于获取元素位置 <template><div class"index-page" ><div class"top-head" ref"index"><img src"logo.png" style"height: 40px;margin-right: 2…

一图流解释Java中线程状态的转换

目录 一.Java中的几大线程状态 二.线程之间的相互转换 ▐ NEW --> RUNNABLE ▐ RUNNABLE <--> WAITING ▐ RUNNABLE <--> Timed Waiting ▐ RUNNABLE<--> BLOCKED ▐ RUNNABLE<-->TERMINATED 一.Java中的几大线程状态 简单来说线程可以处于…

Unity里的Time

Time and frame rate management Time类&#xff1a; Time script reference page. 一些常见的属性有&#xff1a; Time.time 返回从游戏开始经历的时间.Time.deltaTime 返回从上帧结束到现在经历的时间&#xff0c;和帧率成反比Time.timeScale 控制时间流逝的因子Time.fixe…

STM32_HAL_TIM_通用计时器_实现计时

项目思路 1使用定时器计数每秒一次 2使用一个变量记录定时器响应多少次 3使用UART将记录的次数发出 1STM32Cude设置 1配置时钟源 2打开UART 3打开TIM2 3.1界面介绍 3.2选项介绍 Slave Mode&#xff08;从模式&#xff09;&#xff1a;当设备被设置为从模式时&#xff0c…

推荐网站(10)storyset故事集 |免费定制、制作动画和下载插图

今天介绍一个免费定制、制作动画和下载插图的网站storyset故事集。Storyset故事集是一个提供丰富动画插图资源的在线平台&#xff0c;它不仅免费&#xff0c;而且用户友好&#xff0c;可以极大地丰富你的演示文稿&#xff08;PPT&#xff09;和其他视觉内容。 通过Storyset故事…

替补url

检查图片数量是否为6张,如果图片数量不足6张&#xff0c;则用本地图片补充当前位缺失的URL <div class"right-pic-box" v-for"(i, index) in imagesWithReplacement" :key"index"><img :src"i" width"316" height&…