【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++;                                // 链表大小加1
    if(!this.tail) {                            // 如果链表为空,则新节点也是尾节点
        this.tail = node;
    }
};

// 在链表尾部添加一个节点
MyLinkedList.prototype.addAtTail = function(val) {
     const node = new LinkNode(val, null);      // 创建新节点,下一个节点为null
    this.size++;                                // 链表大小加1
    if(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;               // 更新头节点为下一个节点
        // 如果删除的这个节点同时是尾节点,更新尾节点为null
        if(index === this.size - 1){
            this.tail = this.head
        }
        this.size--;                              // 链表大小减1
        return;                                   // 结束函数执行
    }
    // 获取目标节点的上一个节点
    const node = this.getNode(index - 1);        
    node.next = node.next.next;                   // 跳过要删除的节点,即删除操作
    // 如果删除的是尾节点,更新尾节点
    if(index === this.size - 1) {
        this.tail = node;
    }
    this.size--;                                  // 链表大小减1
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

查看Linux服务器的硬盘占用情况

查看Linux服务器的硬盘占用情况 一、查看各分区的使用情况和磁盘挂载1、查看磁盘分区使用和磁盘挂载2、结果解释&#xff08;1&#xff09;列名解释&#xff08;2&#xff09;各系统解释 二、查看一个目录及其所有子目录中文件的总占用大小1、查看指定目录的总大小2、列出目录下…

山东齐鲁文化名人颜廷利:汉语自媒体里面的真正文字智慧

在这个数字技术日新月异的时代&#xff0c;大数据和人工智能等技术的兴起已经深刻地改变了信息的传播方式。特别是随着自媒体的兴起&#xff0c;传统的物质形态的报刊杂志已迅速转变为无形的知识与智慧的流动&#xff0c;这种转变不仅改变了信息的传递手段&#xff0c;更释放出…

GIT基础02 多机器协作等命令

前言 首先我们知道git给我们提供了分支管理的功能 我们一般使用master分支作为线上环境,master分支一般是一个稳定的分支 我们通常是会创建一个其他分支进行开发,这样不会影响线上的机器运行 如果没有git提供这样的分支功能,就无法做到这一套了 指令学习 假设软件出现问题咋办…

SWAT模型高阶应用暨SWAT模型无资料地区建模、不确定分析及气候、土地利用变化对水资源与面源污染影响分析

原文链接&#xff1a;SWAT模型高阶应用暨SWAT模型无资料地区建模、不确定分析及气候、土地利用变化对水资源与面源污染影响分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247604401&idx4&snd2d39846dce07bee765c820de1cf92f3&chksmfa821956cdf5904…

长期的图片活码怎么做?在线制作图片活码的方法

现在通过扫描二维码来查看内容的方式&#xff0c;在日常生活中越来越常见&#xff0c;其中扫码看图就是很常用的一种方式。在很多的公共场所或者宣传单页上&#xff0c;扫码后即可查看相关的图片信息&#xff0c;从而获取我们需要的内容&#xff0c;那么在电脑上将图片生成二维…

Pencils Protocol Season 2 收官在即,Season 3 携系列重磅权益来袭

此前Scroll生态LaunchPad &聚合收益平台Pencils Protocol&#xff08;原Penpad&#xff09;&#xff0c;推出了首个资产即其生态代币PDD的Launch&#xff0c;Season 2活动主要是用户通过质押ETH代币、组件战队等方式&#xff0c;来获得Point奖励&#xff0c;并以该Point为依…

高低温试验箱工厂分享:设备如何保养更节约成本

高低温试验箱在现代产业中起到重要的作用&#xff0c;能够帮助企业进行产品质量和性能的测试&#xff0c;而且这种设备也是一种常见的用于模拟各种极端温度环境的设备。所以这种在特殊环境下使用的设备&#xff0c;维护和保养是关键&#xff0c;正确的保养和维护可以延长设备的…

Spring初学入门(跟学笔记)

一、Spring概述 Spring是一款主流的Java EE轻量级开源框架。 Spring的核心模块&#xff1a;IoC&#xff08;控制反转&#xff0c;指把创建对象过程交给Spring管理 &#xff09;、AOP&#xff08;面向切面编程&#xff0c;在不修改源代码的基础上增强代码功能&#xff09; 二、…

LeetCode刷题笔记第1800题:最大升序子数组和

LeetCode刷题笔记第1800题&#xff1a;最大升序子数组和 题目&#xff1a; 想法&#xff1a; 遍历数组的同时记录当前最大升序子数组和&#xff0c;最终返回最大升序子数组和 class Solution:def maxAscendingSum(self, nums: List[int]) -> int:result 0i 0n len(num…

istio资源字段参考文档

virtual service&#xff1a; Istio / Virtual ServiceConfiguration affecting label/content routing, sni routing, etc.https://istio.io/latest/docs/reference/config/networking/virtual-service/

网站开发初学者指南:2024年最新解读

在信息交流迅速的时代&#xff0c;网页承载着大量的信息&#xff0c;无论你知道还是不知道&#xff0c;所以你知道什么是网站开发吗&#xff1f;学习网站开发需要什么基本技能&#xff1f;本文将从网站开发阶段、网站开发技能、网站开发类型等角度进行分析&#xff0c;帮助您更…

Vue.js 详细介绍

文章目录 一、Vue.js 简介1.1 什么是 Vue.js&#xff1f;1.2 Vue.js 的特点 二、快速上手 Vue.js2.1 安装 Vue.js使用 CDN使用 npm 或 yarn 2.2 创建一个 Vue 实例2.3 Vue.js 项目结构 三、Vue.js 核心概念3.1 数据绑定3.2 指令&#xff08;Directives&#xff09;3.3 组件&…

IDEA不能创建新项目和新模块

问题&#xff1a; IDEA不管是创建新项目还是新模块都创建不成功&#xff0c;会报如下图错误 解决方案&#xff1a; 在电脑设置里搜索 “防火墙和网络保护” &#xff0c;打开如下图所示 找到你所安装的IDEA&#xff0c;更改设置&#xff0c;选中IDEA 最后&#xff0c;确定&am…

Google Chrome GPU渲染抓包

非安全模式启动 "C:\Program Files\Google\Chrome\Application\chrome.exe" --ignore-certificate-errors --allow-running-insecure-content --disable-web-security 配置环境 set RENDERDOC_HOOK_EGL0 "C:/Program Files/Google/Chrome/Application/chrom…

NXP RT1176(一)——二级BootLoader开发(安全引导加载程序SBL)

目录 1. 开发环境 2. 二级BOOT的功能 3. 步骤 3.1 配置源码 3.2 构建项目 3.2.1 MDK 3.2.2 IAR&#xff08;IAR也编译一下工程看看&#xff0c;这样两个平台都可以支持了&#xff09; 单核M7的开发&#xff01;&#xff01; 1. 开发环境 本文Windows下开发&#xff1a;…

pandas style设置指定行的背景色

更多颜色请参考&#xff1a;https://www.sioe.cn/yingyong/yanse-rgb-16/ 效果图&#xff1a; 示例程序 import pandas as pd import numpy as npdef set_row_background_css(row):row_number row.nameif row_number 0: # 第一行设置CornflowerBlue 矢车菊的蓝色.._css …

vue加密传输,后端获取进行解密。

文章目录 概要Vue前端加密后端进行解密小结 概要 vue界面加密传输&#xff0c;后端获取进行解密&#xff0c;适用于登录时密码加密传输。 Vue前端加密 1.安装jsencrypt包&#xff1a; npm install jsencrypt安装完成后package.json会有jsencrypt依赖 2.引入jsencrypt.js到文…

国际铝业协会、中铝、百威亚太、海德鲁、诺贝利斯等企业将出席2024第二届中国绿色铝业国际峰会

据中国有色金属工业协会统计数据显示&#xff0c;2022年我国有色行业二氧化碳排放量约为6.6亿吨&#xff0c;其中铝行业二氧化碳排放量为5.5亿吨&#xff0c;占有色金属行业总排放量的83.3%&#xff0c;约占全国总排放量比重的5%&#xff08;2022年中国二氧化碳排放量约为110亿…

本机搭建RabbitMQ

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、下载安装包&#xff0c;搭建过程 二、重要概念介绍 三、创建用户 方式一&#xff1a;命令行 方式二&#xff1a;管理后台 3.1 创建用户 3.2 分配权限 3.3 提…

如何进行事务处理

1、问题背景 在数据库存储系统中&#xff0c;事务处理是一种保证多个数据库操作作为单个逻辑单元执行的技术。事务处理可以确保数据的一致性、完整性和隔离性。 在使用 Google Cloud Datastore 时&#xff0c;可以使用 datastore.transaction() 函数来进行事务处理。datastor…