JavaScript实现数据结构 -- 链表

2023-11-18

链表

链表和数组一样是有多个元素组成的列表;

不同的是链表元素存储不连续,用next指针连接在一起;
图片来源于网络

链表的特点

  • 插入、删除不需要移动元素;
  • 不必事先分配存储空间;
  • 所需空间与长度成线性正比;
  • 不访问指定元素;

链表和数组的区别

数组:增删非首尾元素时,后面的元素需要移动。

链表:增删非首尾元素时,不需要移动元素,修改next指向即可。

JS模拟链表

虽然JavaScript中没有链表,但是我们可以用对象 来实现链表的功能。

// 用对象模拟链表
const a = { value: 'a' };
const b = { value: 'b' };
const c = { value: 'c' };
const d = { value: 'd' };
const e = { value: 'e' };
// 用next属性将对象连起来
a.next = b;
b.next = c;
c.next = d;
d.next = e;

在这里插入图片描述

遍历链表

// 定义指针p
let p = a;
while(p){
    console.log(p.value);
    p = p.next;
}

在这里插入图片描述

插入节点

将节点f 查到节点a 和 节点b之间;

	const f = { value: 'f' };
	//修改next指向
	a.next = f;
	f.next = b;

在这里插入图片描述

删除节点

修改next指向,删除节点f;

	a.next = b;

在这里插入图片描述

链表应用

删除链表中的节点(leetcode:237)

在这里插入图片描述

思路

将下一个节点的值赋值给当前节点;

删除下一个节点;

代码

	var deleteNode = function(node) {
	    // 将下一个节点值赋值给当前节点
	    node.val = node.next.val;
	    // 删除下一个节点
	    node.next = node.next.next;
	};

在这里插入图片描述

反转链表(leetcode:206)

在这里插入图片描述

思路

使用双指针一前一后遍历链表;

然后反转双指针;

代码

	var reverseList = function(head) {
	    // 定义双指针p1、p2 p1指向头节点,p2指向null(头节点前一个节点)
	    let p1 = head;
	    let p2 = null;
	    //p1指向null时遍历完链表
	    while(p1){
	        const t = p1.next;
	        // 反转链表
	        p1.next = p2;
	        // 遍历链表
	        p2 = p1;
	        p1 = t;
	    }
	    return p2;
	};

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript实现数据结构 -- 链表 的相关文章

  • 页面在 Google Adwords 转化跟踪上重定向

    我有一个表单 人们可以在其中提交数据 然后使用 ajax 将数据发送到服务器 我已将其设置为 Google Adwords 中的转化 下面是我使用过的代码 问题是 当用户提交表单时 在收到响应后 它会重定向回我给出的 URL 我不想重定向
  • 在 onclick 事件上请求麦克风

    有一天 我偶然发现了这个 Javascript 录音机的例子 http webaudiodemos appspot com AudioRecorder index html http webaudiodemos appspot com Au
  • HTML 和 标签有什么区别?

    HEAD 标签和 BODY 标签有什么区别 大多数 HTML 书籍仅 简短 提及 and 标签 但它们消失得很快 它们会影响浏览器呈现网页的方式吗 另外 它们会影响 javascript 的运行顺序吗 我的意思是 如果我里面有一个javas
  • 有什么方法可以复制 div 的渲染 HTML 吗?

    我正在开发电子邮件签名生成器 我想通过按按钮复制最终签名 而不是手动选择签名并将其复制到剪贴板 这意味着我需要它们的图像 文本和样式 我尝试了几种变体 包括 w3schools 的变体 但没有成功 其中一些只是复制文本 但没有样式 例子 h
  • jQuery 可以操作插入的元素吗?

    我是 jQuery 的新手 我认为 jQuery 可以操作由代码添加的元素是合理的 但我发现现在还不能 function addVideo click function publisher append div div
  • React中如何触发同级组件的函数?

    I am new to front end world and could not figure out how to trigger a function from a sibling component Lets say I have
  • 需要参数的addEventListener(和removeEventListener)函数

    我需要向 8 个对象 手掌 添加一些侦听器 这些对象是相同的 但行为必须根据它们的位置而改变 我有以下 丑陋的 代码 root palmsStatus B B B B B B B B if root palmsStatus 0 N root
  • Visual Studio 改变 Ctrl-K-D 的工作方式

    In Visual Studio I m using 2012 is there any way of editing the way that Ctrl K D combinations handles its Auto Formatti
  • 在自动完成上添加 jQuery 延迟

    我正在尝试为应用程序创建 jQuery 自动完成 search input on keyup function search this val autocomplete div autocomplete get ajax search se
  • “require(...)”是常见的 JavaScript 模式还是库函数?

    我通常发现这是 node js 脚本 模块以及 phantomJS casperJS 等中的第一行 我很好奇 这是否是服务器端 javascript SSJS 的常见模式 类似于 include在 C C 中或import在 Java 中
  • fadeOut() 和slideUp() 同时进行?

    我已经发现jQuery 淡出然后滑动 https stackoverflow com questions 734554 jquery fadeout then slideup这很好 但不是那个 我怎么能够fadeOut and slideU
  • 自调用函数未定义

    如果我声明一个函数文字 var x function alert hi console log x returns the function code However var x function alert hi console log
  • 冒泡可用于图像加载事件吗?

    我可以用吗 window addEventListner 某种程度上来说 我所有的图像都有一个display none 图像加载后 我想设置display inline 这样我就可以规范下载图像时显示的内容 在这种情况下 我无法预加载图像
  • 如何在具有相同值的下拉菜单上触发 jQuery 更改事件

    即使用户选择相同的值 如何每次都触发 jQuery 更改事件 我需要刷新效果 例如如果用户选择Lawyer它会发出警报hello然后用户再次选择Lawyer从下拉菜单中 它应该发出警报hello 我怎样才能实现它 以下是代码 jQuery
  • 使用 File API polyfill 读取数据 URL

    我正在尝试使用文件 API 库 https github com mailru FileAPI https github com mailru FileAPI 作为不支持文件 API 的浏览器的后备 以便将文件作为数据 URL 读取并将其传
  • 如何为 jQuery 插件设置私有变量?

    我想创建一个简单的插件 它使用元素的文本作为默认值 或者您可以在调用插件时设置此值 但是 如果我不设置该值 并为多个元素调用插件 则默认值会成倍增加 function fn reText function options var setti
  • 使圆圈与 d3.js 上的多线匹配相同的颜色过滤?

    我有一个多线图 当按每种水果过滤时会更新 每条线条颜色对应不同的销售年份 在 的帮助下Shashank https stackoverflow com users 5569282 shashank 每个数据点线上的圆圈已添加到组中 而不是直
  • Jquery 以编程方式更改

    文本

    编辑 解决方案是将其添加到个人资料页面而不是性别页面 profile live pageinit function event p pTest text localStorage getItem gender 我在列表视图中有一个带有一些文
  • 区分 NaN 输入和输入类型为“number”的空输入

    我想使用 type number 的表单输入 并且只允许输入数字
  • 为什么 try catch 块没有捕获 Promise 异常?

    我对承诺的错误处理感到困惑 答案可能很明显 但我不明白 我有以下示例代码 var test async function throw new Error Just another error try test then catch err

随机推荐

  • kvm创建快照与还原

    对k8s m1虚拟机创建快照 virsh snapshot create as k8s m1 20190317 查看虚拟机镜像快照的版本 virsh snapshot list k8s m1 或者 qemu img info opt kvm
  • Qt信号与槽

    信号与槽是Qt编程的基础 信号与槽在Qt中处理界面各个组件的交互操作时变得更加的直观和简单 信号 信号 Signal 就是在特定情况下被发射的事件 GUI程序设计的主要内容就是对界面上各个组件的信号进行响应 只需要知道什么情况下发射哪些信号
  • Vim配置#Vim插件安装#NERDTree配置

    一 centos系统的Vim安装 普通用户下输入命令 yum y install vim 之后输入y 即可等待安装完成 二 Vim的配置 如果你需要配置vim 只需在Home目录创建一个 vimrc文件即可以配置vim了 如需安装插件 在
  • mybatis ----数据级联查询(多对一)

    工程的目录结构 有两个表 一个文章表article 一个用户表user create table article id int 11 not null auto increment userid int 11 not null title
  • vscode连接github

    此次采用ssh方式 分为以下几步 目录 1 生成公钥 配置到github 2 在本地建立仓库 推送到本地的master分支 3 在github建立仓库 复制ssh 进行推送 一 生成公钥 本地生成公钥和私钥 将公钥配置到github中 通过
  • spark内存模型

    Spark 1 6 开始使用了统一内存管理模块 UnifiedMemoryManager 并引入了堆外内存 Off heap memory 1 6之前的内存管理就不进行介绍了 spark堆内和堆外内存模型的示意图 注意 堆外内存是依赖于wo
  • 258. Add Digits

    class Solution public int addDigits int num int nRet 0 if num lt 10 return num int nTemp 0 while num 0 nTemp nTemp num 1
  • Python Cheat Sheet -- 速查表

    这是基于Python Crash Course Second Edition的知识速查表 很全面的知识梳理脑图 后面附有下载链接 供大家学习 参考资料 https github com ehmatthes pcc 2e https ehma
  • Java基础知识超详细总结

    1 Java文件格式 Java源文件 java 保存Java源代码 Java字节码文件 class 保存对Java源代码编译之后的内容 2 Java文件运行方式 1 将源代码保存在扩展名为 java的文件中 如果源程序中定义了public类
  • 黑苹果不能使用无线网解决办法

    网上找了很多方法 都不能让我的黑苹果上网 果然还是得靠自己 抱着碰碰运气的态度 通过四叶草 安装驱动 在下图所示的已经安装的驱动中 我可以明确的告诉大家 其中一个是usb上网的驱动 也就是说 可以通过手机usb共享网络 而在这之前 我只能通
  • 从0开始写Vue项目-SpringBoot整合Mybatis-plus实现登录、注册功能

    1 从0开始写Vue项目 环境和项目搭建 慕言要努力的博客 CSDN博客 2 从0开始写Vue项目 Vue2集成Element ui和后台主体框架搭建 慕言要努力的博客 CSDN博客 3 从0开始写Vue项目 Vue页面主体布局和登录 注册
  • Element UI 之坑

    el procomfirm 事件 confirm 低版本的需要改 onConfirm
  • 【华为OD机试 2023 B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 游戏外包开发技术难点分析

    游戏开发涉及多个领域的技术 因此在开发过程中可能会遇到很多技术难点 今天和大家分享一些常见的游戏开发技术难点 希望对大家开发游戏有一定帮助 北京木奇移动技术有限公司 专业的软件外包开发公司 欢迎交流合作 1 图形渲染 游戏开发中的图形渲染技
  • vue从入门到入土--------综合案例

    目录 vue cli 组件库 axios 拦截器 proxy 跨域代理 用户列表案例 总结 vue cli 1 什么是 vue cli vue cli 俗称 vue 脚手架 是 vue 官方提供的 快速生成 vue 工程化项目的工具 vue
  • python基础六:列表

    1 序列 1 1基本概念 序列就是python中最基本的一种数据结构 用于保存一组有序的数据 所有的数据在序列当中都会有唯一的一个位置 索引 与之对应 并且序列会按照数据添加的顺序来分配索引 1 2序列的分类 可变序列 序列中的元素可以改变
  • Pycharm里如何调整代码字体大小?

    步骤一 我们在桌面上找到Pycharm 并将其打开 步骤二 打开pycharm之后 我们点击左上角的file选项 也就是文件的选项 步骤三 在文件的选项下 我们选择settings的选项 然后打开settings的窗口页面 步骤四 进入到s
  • ssh怎么访问服务器文件,ssh本地访问远程服务器文件

    ssh本地访问远程服务器文件 内容精选 换一换 Cloud Init工具安装完成后 请参考本节操作配置Cloud Init工具 已安装Cloud Init工具 已为云服务器绑定弹性公网IP 已登录云服务器 云服务器的网卡属性为DHCP方式
  • Linux 经典面试题

    1 下面关于pthread线程相关的 说法正确的是 a 线程是可以通过pthread create来创建 b 在线程中使用usleep 50 1000 一定是精确无误地休眠50毫秒 c 如果有个全局变量在没有加锁保护的情况下被两个线程同时访
  • JavaScript实现数据结构 -- 链表

    文章目录 链表 链表的特点 链表和数组的区别 JS模拟链表 遍历链表 插入节点 删除节点 链表应用 删除链表中的节点 leetcode 237 思路 代码 反转链表 leetcode 206 思路 代码 链表 链表和数组一样是有多个元素组成