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

LeetCode 热题100:160.相交链表

基础解法

时间复杂度O(m+n),空间复杂度O(m)

  1. 遍历其中一个链表,存储每个节点的地址;
  2. 遍历另一个链表,若节点在数组中已有该地址,则为第一个相交点。
var getIntersectionNode = function (headA, headB) {let arr = [];let Intersected = null;//数组存储一个链表,判断引用类型值是否在数组里function traverseLink(head) {if (head == null) {return;}arr.push(head);return traverseLink(head.next);}traverseLink(headA);function Check(head) {if (head == null || Intersected !== null) {return;}if (arr.includes(head)) {Intersected = head;}return Check(head.next);}Check(headB);return Intersected;
};

进阶解法

时间复杂度O(m+n),空间复杂度O(1)

参照图片,链表A指针从开始到null,链表A步长 = 链表A独立节点步长 + 公共节点步长 + 空节点;

同理,链表B步长 = 链表B独立节点步长 + 公共节点步长 + 空节点。

则有: 链表A步长 + 链表B独立节点步长 ==  链表B步长 +链表A独立节点步长。

根据这个思路,当A和B指针遍历到null,跳到对方的头节点,若两个节点相等,则一定交于同一个节点(最终一定交于null)。类似快慢指针的思路。

代码有:

var getIntersectionNode = function (headA, headB) {let pointA = headA,PointB = headB;while (pointA !== PointB) {pointA = (pointA ? pointA.next : headB);PointB = (PointB? PointB.next : headA);}return pointA;
};

http://www.dtcms.com/a/294514.html

相关文章:

  • [CH582M入门第十步]蓝牙从机
  • Acrobat JavaScript Console 调试控制台
  • 关于网络安全等级保护的那些事
  • 【MyBatis-Plus】核心开发指南:高效CRUD与进阶实践
  • 基于Kafka实现简单的延时队列
  • XiangJsonCraft:用JSON快速构建动态HTML页面的利器
  • 第十章 W55MH32 SNTP示例
  • LarkXR实时云渲染支持Quest客户端手势操作:免手柄直控云XR应用
  • 刷完jetpack后无法打开安装的浏览器的解决办法useful
  • arm64架构开发板上调用奥比中光深度摄像头用于视觉测距
  • Linux -- 进程【下】
  • OpenHarmony BUILD.gn中执行脚本
  • 全连接队列
  • 【Ansible】Ansible 管理 Elasticsearch 集群启停
  • 【提示词技巧】高级提示方法与框架
  • 机器学习优化技术深度解析:自适应优化器对比与Adam的二阶矩偏差修正证明
  • 系统学习算法:专题十四 链表
  • AI黑科技:GAN如何生成逼真人脸
  • 基于 Qiankun 的微前端实践案例:电商平台多模块整合方案
  • HCIP笔记
  • 在 macOS 上 安装最新 Python 和 pip
  • mac电脑搭载c、c++环境(基于vs code)
  • 粗大误差智能滤除:基于格拉布斯准则与机器学习的数据清洗体系​
  • 【MySQL】MySQL 索引详解
  • 【数据结构】线性表概括
  • 野指针和内存泄漏是什么?
  • 基于YOLOv5+pyQT6的目标检测系统通用项目模板
  • React中的antd的表格使用方法
  • HDFS写性能优化技巧详解:从理论到实践
  • HBase新手入门