leetcode707-设计链表

devtools/2025/1/20 3:21:48/

leetcode 707
在这里插入图片描述

思路

本题也是用了虚拟头节点来进行解答,这样的好处是,不管是头节点还是中间的节点都可以当成是中间节点来处理,用同一套方法就可以进行处理,而不用考虑太多的边界条件。
下面题目中最主要的实现就是添加操作addAtIndex和删除操作deleteAtIndex,对于在头节点和尾节点添加其实都是调用添加方法就可以,头节点设置index = 0, 尾节点设置index = size

get

获取某个节点值,通过循环遍历到当前节点,设置一个cur来记录每次遍历到的当前节点,然后返回cur.val

add

我们要添加的时候一定需要找到的是索引的前一个节点,因为这样才可以进行添加,如果找成了后一个节点,那么我们由于这里设置的是单向链表,就无法再去索引到前一个节点,也就没办法进行连接,找到了前一个节点之后,需要先把要添加到节点设置为cur.next,然后再设置cur.next = node; ,注意这里顺序一定不能错,一旦先把cur.next 设置为node以后,原先的cur.next就断掉,node.next就无法继续设置

delete

这里删除操作可以参考前一篇的博文:移除链表元素
不过这里的删除操作会更简单一些,总的来说就是跳过需要删除的节点,把cur.next 设置为cur.next.next

实现

// 创建链表节点
class CreateNode{constructor(val,next){this.val = val ?? 0;this.next = next ?? null;}
}var MyLinkedList = function() {this.size = 0;this.dummy = new CreateNode(0);
};/** 
获取下标为index的值* @param {number} index* @return {number}*/
MyLinkedList.prototype.get = function(index) {if(index < 0 || index >= this.size) return -1;let cur = this.dummy.next;for(let i = 0; i < index;i++){cur = cur.next}return cur.val;
};/** 
添加到头节点* @param {number} val* @return {void}*/
MyLinkedList.prototype.addAtHead = function(val) {this.addAtIndex(0,val);
};/** 
添加到尾节点* @param {number} val* @return {void}*/
MyLinkedList.prototype.addAtTail = function(val) {this.addAtIndex(this.size,val);
};/** 
添加到index节点前* @param {number} index * @param {number} val* @return {void}*/
MyLinkedList.prototype.addAtIndex = function(index, val) {if(index < 0 || index > this.size) return;// 可以进行添加,size++this.size++;let cur = this.dummy;for(let i = 0;i<index;i++){cur = cur.next;}// 进行添加操作const node = new CreateNode(val);node.next = cur.next;cur.next = node;
};/** 
删除节点* @param {number} index* @return {void}*/
MyLinkedList.prototype.deleteAtIndex = function(index) {if(index >= this.size || index < 0) return;// 可以进行删除,长度size-1this.size--// 获取到可删除的节点的前一个节点let cur = this.dummy;for(let i = 0;i<index;i++){cur=cur.next;}// 删除操作cur.next = cur.next.next
};

http://www.ppmy.cn/devtools/151989.html

相关文章

AI 编程工具—Cursor AI 对话模式详解 内嵌对话模式

AI 编程工具—Cursor AI 对话模式详解 内嵌对话模式 前面我们已经学习了Cursor 的两种工作模式,也就是Chat、Composer 更多细节可以看之前的文章 Cursor 对话模式详解 Chat、Composer 与 Normal/Agent 模式 这一节我们按一下最后一种模式,也就是内嵌对话模式 内嵌对话模式…

乘联会:1月汽车零售预计175万辆 环比暴跌33.6%

快科技1月18日消息&#xff0c;据乘联会的初步推算&#xff0c;2025年1月狭义乘用车零售总市场规模预计将达到约175万辆左右。与去年同期相比&#xff0c;这一数据呈现了-14.6%的同比下降态势&#xff1b;而相较于上个月&#xff0c;则出现了-33.6%的环比暴跌情况。 为了更清晰…

uniApp开通uniPush1.0个推,SpringBoot集成uniPush1.0个推

uniApp开通unipush1.0个推&#xff0c;SpringBoot程序集成 一、APP开通unipush1.0个推(商户App源码仅支持1.0个推) 1.app模块配置开通推送 2.应用开通推送 3.开通后点击消息推送菜单会看到如下页面 完成以上步骤后 此时android 仅支持在线推送。 4.配置各厂商离线推送 暂未…

微信小程序-base64加解密

思路&#xff1a;先创建一个base64.js的文件&#xff0c;这个文件可以作为专门加解密的文件模块&#xff0c;需要时就引用&#xff1b;创建好后&#xff0c;引用base64.js里的加解密函数。 注意&#xff1a;引用模块一定要引用正确的路径&#xff0c;否则会报错。 base64.js:…

Java复习第二天

一、代码题 1.合并两个有序数组 (1)题目 给你两个按 非递减顺序 排列的整数数组 nums1和 nums2&#xff0c;另有两个整数 m和n&#xff0c;分别表示nums1和nums2 中的元素数目。 请你合并nums2到 nums1中&#xff0c;使合并后的数组同样按非递减顺序排列。 注意:最终&#…

矩阵碰一碰发视频源码技术开发全解析,支持OEM

在当今数字化内容传播迅速发展的时代&#xff0c;矩阵碰一碰发视频功能以其便捷、高效的特点&#xff0c;为用户分享视频提供了全新的体验。本文将深入探讨矩阵碰一碰发视频源码的技术开发过程&#xff0c;从原理到实现&#xff0c;为开发者提供全面的技术指引。 一、技术原理 …

两个关于TCP/IP的问题

tcp的客户端是会随机选择一个端口连接到服务端的&#xff0c;那么如果在非常短的时间内&#xff0c;在客户端生产上百万个的tcp连接&#xff0c;会导致什么问题&#xff1f;出现这样的问题&#xff0c;在linux操作系统里面要怎么解决&#xff1f;在其他的操作系统里面又要怎么解…

简单组合逻辑

多路选择器 在多路数据传输过程中&#xff0c;能够将任意一路选出来的电路叫做数据选择器&#xff0c;也称多路选择器。对于一个具有2^n个输入和一个输出的多路选择器&#xff0c;有n个选择变量&#xff0c;多路选择器也是FPGA内部的一个基本资源&#xff0c;主要用于内部信号的…