前端算法-链表相交

简介: 前端算法-链表相交

题目

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

输入: intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
输出: null
解释: 从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。

思路一

我们可以使用双指针方法,进去先判断当前的形参headA和headB其中一个值是否为null,如果其中一个值为null则直接返回null,两个指针同时遍历两个链表,每个指针遍历两个链表各一次,当pA遍历链表A结束时,再指向链表B头结点,否则继续遍历链表A,当pB遍历链表B结束时,再指向链表A头节点;否则继续遍历链表B,pA和pB相遇的地方即为相交点,最后返回即可

var getIntersectionNode = function(headA, headB) {
    if (headA === null || headB === null) {
        return null;
    }
    let pA = headA, pB = headB;
    while (pA !== pB) {
        pA = pA === null ? headB : pA.next;
        pB = pB === null ? headA : pB.next;
    }
    return pA;
};

思路二

我们这里已知如果两个链表有交点,那么一定是后一小截相同, 所以将两个链表的起点统一即可,dist变量用来记录两个链表的长度差,lengthA和lengthB变量用来记录长度,p1和p2变量用来记录表头,在遍历完链表取得长度后在重新指回表头,获取headA和headB的长度,并重新指回表头,在进行较长链表的指针移位操作,从相同后缀的长度开始遍历链表,找到相同链表节点,最后将其返回即可

var getIntersectionNode = function(headA, headB) {
    let dist = 0;
    let lengthA = 0, lengthB = 0
    let p1 = headA, p2 = headB;
    while (headA) {
        lengthA++;
        headA = headA.next;
    }
    while (headB) {
        lengthB++;
        headB = headB.next;
    }
    headA = p1;
    headB = p2;
    if (lengthA < lengthB) {
        dist = lengthB - lengthA;
        while (dist--) {
            headB = headB.next;
        }
    } else if (lengthA > lengthB) {
        dist = lengthA - lengthB;
        while (dist--) {
            headA = headA.next;
        }
    }
    while (headA && headB) {
        if (headA === headB) {
            return headB;
        }
        headA = headA.next;
        headB = headB.next;
    }
    return null;
};


相关文章
|
2月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
101 1
|
8天前
|
算法 前端开发 机器人
一文了解分而治之和动态规则算法在前端中的应用
该文章详细介绍了分而治之策略和动态规划算法在前端开发中的应用,并通过具体的例子和LeetCode题目解析来说明这两种算法的特点及使用场景。
一文了解分而治之和动态规则算法在前端中的应用
|
8天前
|
算法 前端开发
一文了解贪心算法和回溯算法在前端中的应用
该文章深入讲解了贪心算法与回溯算法的原理及其在前端开发中的具体应用,并通过分析LeetCode题目来展示这两种算法的解题思路与实现方法。
|
8天前
|
前端开发 JavaScript C++
详解链表在前端的应用,顺便再弄懂原型和原型链!
该文章深入解析了链表在前端开发中的应用,并详细阐述了JavaScript中的原型和原型链的概念及其工作原理。
|
2月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
110 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
2月前
|
JavaScript 算法 前端开发
"揭秘Vue.js的高效渲染秘诀:深度解析Diff算法如何让前端开发快人一步"
【8月更文挑战第20天】Vue.js是一款备受欢迎的前端框架,以其声明式的响应式数据绑定和组件化开发著称。在Vue中,Diff算法是核心之一,它高效计算虚拟DOM更新时所需的最小实际DOM变更,确保界面快速准确更新。算法通过比较新旧虚拟DOM树的同层级节点,递归检查子节点,并利用`key`属性优化列表更新。虽然存在局限性,如难以处理跨层级节点移动,但Diff算法仍是Vue高效更新机制的关键,帮助开发者构建高性能Web应用。
53 1
|
2月前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
|
2月前
|
数据采集 前端开发 算法
基于朴素贝叶斯算法的新闻类型预测,django框架开发,前端bootstrap,有爬虫有数据库
本文介绍了一个基于Django框架和朴素贝叶斯算法开发的新闻类型预测系统,该系统具备用户登录注册、后台管理、数据展示、新闻分类分布分析、新闻数量排名和新闻标题预测等功能,旨在提高新闻处理效率和个性化推荐服务。
|
2月前
|
算法 Python
【Leetcode刷题Python】106.相交链表
采用双指针法来找出两个链表的相交起始节点,并详细解释了算法的时间和空间复杂度。
16 1
下一篇
无影云桌面