JS算法-链表相交

简介: JS算法-链表相交

题目


你两个单链表的头节点 headAheadB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
输出:Intersected at '8'
解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。


题解


第一种


首先我们在函数中先初始化变量 lenA, lenB, a, b 分别为 0, 0, headA, headB,然后通过 while 循环遍历链表 A 和 B,计算它们的长度 lenA 和 lenB,并记录最后一个节点 a 和 b, 如果 a !== b,说明它们没有交点,直接返回 null,如果 lenA > lenB,说明链表 A 比链表 B 长,交换它们的位置,使得 lenA <= lenB,接下来初始化变量 count = lenB - lenA,表示链表 B 需要向后移动的步数,在通过 while 循环将链表 B 向后移动 count 步,同时遍历链表 A 和 B,直到找到第一个相同的节点,即为它们的交点,最后返回交点或 null

var getIntersectionNode = function (headA, headB) {
  let lenA = 0;
  let lenB = 0;
  let a = headA;
  let b = headB;
  while (a.next) {
    lenA++;
    a = a.next;
  }
  while (b.next) {
    lenB++;
    b = b.next;
  }
  if (a !== b) return null;
  if (lenA > lenB) {
    [headA, headB] = [headB, headA];
    [lenA, lenB] = [lenB, lenA];
  }
  let count = lenB - lenA;
  while (count--) {
    headB = headB.next;
  }
  while (headB && headA) {
    if (headB === headA) return headA;
    headB = headB.next;
    headA = headA.next;
  }
  return null;
};


第二种


首先定义两个指针p1和p2,分别指向两个链表的头节点,然后在while循环中,判断p1和p2是否相等。如果相等,说明已经找到了两个链表的交点,直接返回p1即可,如果p1或p2为null,说明已经到达了链表的末尾,需要将它们重新指向另一个链表的头节点,继续遍历。如果p1为null,就将它指向headB;如果p2为null,就将它指向headA,最后,如果两个链表有交点,while循环结束后p1就指向了交点。如果两个链表没有交点,while循环结束后p1和p2都为null,直接返回其中一个即可

var getIntersectionNode = function (headA, headB) {
  let p1 = headA, p2 = headB;
  while (p1 != p2) {
    if (p1 == null) {
      p1 = headB
    } else {
      p1 = p1.next
    }
    if (p2 == null) {
      p2 = headA
    } else {
      p2 = p2.next
    }
  }
  return p1
};
相关文章
|
3天前
|
JavaScript 算法 安全
深度剖析:共享文件怎么设置密码和权限的 Node.js 进阶算法
在数字化时代,共享文件的安全性至关重要。本文聚焦Node.js环境,介绍如何通过JavaScript对象字面量构建数据结构管理文件安全信息,包括使用`bcryptjs`库加密密码和权限校验算法,确保高效且安全的文件共享。通过实例代码展示加密与权限验证过程,帮助各行业实现严格的信息资产管理与协作。
|
18天前
|
存储 监控 算法
局域网网络管控里 Node.js 红黑树算法的绝妙运用
在数字化办公中,局域网网络管控至关重要。红黑树作为一种自平衡二叉搜索树,凭借其高效的数据管理和平衡机制,在局域网设备状态管理中大放异彩。通过Node.js实现红黑树算法,可快速插入、查找和更新设备信息(如IP地址、带宽等),确保网络管理员实时监控和优化网络资源,提升局域网的稳定性和安全性。未来,随着技术融合,红黑树将在网络管控中持续进化,助力构建高效、安全的局域网络生态。
41 9
|
24天前
|
监控 算法 JavaScript
基于 Node.js Socket 算法搭建局域网屏幕监控系统
在数字化办公环境中,局域网屏幕监控系统至关重要。基于Node.js的Socket算法实现高效、稳定的实时屏幕数据传输,助力企业保障信息安全、监督工作状态和远程技术支持。通过Socket建立监控端与被监控端的数据桥梁,确保实时画面呈现。实际部署需合理分配带宽并加密传输,确保信息安全。企业在使用时应权衡利弊,遵循法规,保障员工权益。
39 7
|
22天前
|
存储 监控 JavaScript
深度探秘:运用 Node.js 哈希表算法剖析员工工作时间玩游戏现象
在现代企业运营中,确保员工工作时间高效专注至关重要。为应对员工工作时间玩游戏的问题,本文聚焦Node.js环境下的哈希表算法,展示其如何通过快速查找和高效记录员工游戏行为,帮助企业精准监测与分析,遏制此类现象。哈希表以IP地址等为键,存储游戏网址、时长等信息,结合冲突处理与动态更新机制,确保数据完整性和时效性,助力企业管理层优化工作效率。
29 3
|
2月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
3月前
|
存储 缓存 算法
经典算法之链表篇(三)
经典算法之链表篇(三)
|
3月前
|
算法
经典算法之链表篇(二)
经典算法之链表篇(二)
|
3月前
|
算法 索引
经典算法之链表篇
经典算法之链表篇
|
3月前
|
算法
❤️算法笔记❤️-(每日一刷-160、相交链表)
❤️算法笔记❤️-(每日一刷-160、相交链表)
28 1

热门文章

最新文章