当前位置: 首页 > article >正文

【JavaScript】数据结构之链表(双指针、滑动窗口)

什么是链表?

  • 多个元素存储的列表
  • 链表中的元素在内存中不是顺序存储的,而是通过“next”指针联系在一起的,这个“next”可以自定义。
  • JS中的原型链原理就是链表结构,是通过__proto__指针联系在一起的。
    在这里插入图片描述
    在这里插入图片描述

双指针形式

  • 对撞指针:一般用于顺序结构中,也称左右指针
    • 对撞指针从两端向中间移动。一个指针从最左端开始,另一个从最右端开始,然后逐渐向中间逼近。
    • 对撞指针的终止条件一般是两个指针相遇( left === right )或者错开(left > right),也可能在循环内部找到结果跳出循环。
  • 快慢指针:又称为龟兔赛跑算法
    • 使用两个移动速度不同的指针在数组或者链表等序列结构上移动。
    • 这种方法对于处理环形链表或者数组非常有用。
  • 背向指针,对向指针(滑动窗口)

滑动窗口

  • 也是通过双指针的思路去解决问题的
  • 窗口的扩张得到结果,窗口的缩小优化结果
  • 思路
    • 右侧指针移位
    • 判断是否符合预期
    • 左侧指针是否需要移位
    • 进入下一次循环

链表和数组的区别

  • 数组是有序存储的,有下标0,1,2,3,在数组中间某个位置删除或添加某个元素,其他元素下标要跟着一起变化。
  • 链表中的元素在内存中不是顺序存储的,而是通过“next”指针联系在一起的。
  • 数组通过下标查找即可;链表每次查找都需要从头开始找。

链表的几种形式

  • 单向链表
    在这里插入图片描述
  • 双向链表
    在这里插入图片描述
  • 环形链表

操作链表

在这里插入图片描述

链表案例

  • instanceof 原理

链表习题

leetcode 链表习题


http://www.kler.cn/a/313586.html

相关文章:

  • 【vue2.0入门】vue基本语法
  • 时间管理的三个痛点
  • 封装el-menu
  • 微服务day07
  • JavaScript高级程序设计基础(四)
  • ML 系列: 第 24 节 — 离散概率分布(泊松分布)
  • 切换淘宝最新镜像源npm详细讲解
  • 计算机毕业设计选题推荐-4S店试驾平台-小程序/App
  • 过采样和欠采样
  • C++ 字符串最后一个单词的长度(牛客网)
  • # wps必须要登录激活才能使用吗?
  • 摄影学习平台
  • 【Linux】简易日志系统
  • Web前端开发
  • PHP 数组排序类型介绍
  • 基于微信小程序的剧本杀游玩一体化平台
  • [数据结构]算法复杂度详解
  • 代码随想录算法训练营Day7
  • 基于MySQL全量备份+GTID同步的主从架构恢复数据至指定时间点
  • Linux--禁止root用户通过ssh直接登录
  • Java项目实战II基于Java+Spring Boot+MySQL的网上租贸系统设计与实现(开发文档+源码+数据库)
  • 情感AI:科技赋能情感计算的新时代
  • SpringBoot:token是用来鉴权的,那session的作用是什么?
  • 笔记:将WPF中可视化元素(Visual)保存为图像,如PNG,JPEG或BMP的方法简介
  • 设计模式七大原则
  • 毕业设计选题:基于ssm+vue+uniapp的农产品自主供销小程序