首页 > 编程语言 >算法刷题_链表篇

算法刷题_链表篇

时间:2024-12-25 15:26:45浏览次数:6  
标签:ListNode 链表 算法 curB curA 长度 刷题 指针

算法刷题Day8_链表相交


文章目录

前言

简单来说,就是求两个链表交点节点的指针。

一、求出两个链表的长度和差值

在这里插入图片描述

ListNode *curA = headA;
ListNode *curB = headB;
int lenA=0,lenB=0;
while(curA!=NULL){// 求链表A的长度
	len++;
	curA=curA->next;
}
while(curB!=NULL){/ 求链表B的长度
	len++;
	curB=curB->next;
}
curA=headA;
curB=headB;
 // 让curA为最长链表的头,lenA为其长度
if(lenB>lenA){
	swap(lenA,lenB);
	swap(curA,curB);
int gap=lenA-lenB;

二、让其中较长一个链表移动到和第二链表对齐的位置

由于对齐后后面的元素都需要相等,就移动长的那个链表的指针到与短链表能一一对应的地方,开始逐个比较。

在这里插入图片描述

代码如下(示例):

while(gap--){
	curA=curA->next;
}
  // 遍历curA 和 curB,遇到相同则直接返回
  while(curA!=NULL){
  	if(curA=curB){
  		return curA;
  	}
  	curA=curA->next;
  	curB=curB->next;
  	}
  	return NULL;
}
  

三、其他解法_双指针法:

假设链表的结构:
链表 A 的长度为 m,链表 B 的长度为 n。
两链表的相交部分长度为 c,且交点前链表 A 有部分长度为 a,链表 B 有部分长度为 b。
m = a + c
n = b + c
指针的路径:
指针 pA 的完整路径:a + c + b + c(遍历 A 后切换到 B)
指针 pB 的完整路径:b + c + a + c(遍历 B 后切换到 A)
两条路径的总长度是相同的:
a + c + b + c = b + c + a + c。
因此,无论两个链表的长度差多少,两个指针最终会在 交点处 相遇,或者同时到达 nullptr(没有交点的情况)。

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        if (!headA || !headB) {
            return nullptr; // 如果任一链表为空,直接返回 null
        }

        // 初始化两个指针
        ListNode* pA = headA;
        ListNode* pB = headB;

        // 遍历两个链表
        while (pA != pB) {
            // 如果当前指针到达链表末尾,则切换到另一个链表的头部
            pA = (pA == nullptr) ? headB : pA->next;
            pB = (pB == nullptr) ? headA : pB->next;
        }

        // 返回相交节点或 null
        return pA;
    }
};

总结

推荐使用双指针法:它更简洁、高效,不需要显式计算链表长度。在需要快速实现时,双指针法是更好的选择。学习或演示可以用长度对齐法:长度对齐法的逻辑更直观,更容易理解。适合用于学习链表操作或展示思路。

标签:ListNode,链表,算法,curB,curA,长度,刷题,指针
From: https://blog.csdn.net/qq_46001754/article/details/144691743

相关文章

  • 预测类算法实施全攻略:从数据到部署的完整流程
    一、问题定义明确目标变量:确定要预测的对象,例如预测股票价格、客户流失率、天气状况等。清晰地定义目标变量的含义和范围。了解业务背景:深入研究问题所在的领域,如在预测电商销售额时,需要了解产品类型、销售渠道、促销活动等因素对销售额的影响。确定预测期限:明确是进行短期预......
  • 算法在各领域的广泛应用:100 个实例全解析
    一、互联网与信息技术领域搜索引擎算法:如谷歌的PageRank算法,用于根据网页的重要性和相关性对搜索结果进行排序,帮助用户快速找到所需信息。推荐系统算法:例如亚马逊和Netflix使用的协同过滤算法。根据用户的历史行为(购买、观看记录等)和其他相似用户的偏好,为用户推荐可能感兴趣的......
  • 算法是神马(・◇・)?
    概念、描述算法的概念算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。我们常认为,算法是个很高深的词汇。而大音希声,大象无形,最复杂的对......
  • 详细讲一下Vue2.x,Vue3.x,React的Vdom和Diff算法
    1.Vue的vdom和Diff1.1.Vue的实现://Vue2.x的VNode结构{tag:'div',//标签名data:{//节点数据class:'container',attrs:{id:'app'},on:{click:handler}},childr......
  • 机器人核心算法
    机器人的核心算法涵盖多个方面,这些算法相互协作,使机器人能够感知环境、进行决策并执行任务。以下是一些常见的机器人核心算法:运动控制算法PID控制算法:这是一种经典的反馈控制算法,由比例(Proportional)、积分(Integral)、微分(Derivative)三个环节组成。在机器人运动控制中,PID控制器根......
  • 贪心算法之分发糖果--附java完整代码
    leetcode135.分发糖果classSolution{/**分两个阶段1、起点下标1从左往右,只要右边比左边大,右边的糖果=左边+12、起点下标ratings.length-2从右往左,只要左边比右边大,此时左边的糖果应该取本身的糖果数(符合比它......
  • ​如何从零开始学习大模型等人工智能算法
    学习人工智能可以分为几个关键步骤。以下是一个从零开始学习人工智能的指南:前排提示,文末有大模型AGI-CSDN独家资料包哦!建立数学和统计基础:学习线性代数,了解矩阵、向量、矩阵运算等基本概念。掌握微积分,包括导数和积分,对于理解机器学习算法中的优化过程很重要。理解......
  • 人工智能系列算法‘’全家桶‘’分类,详细介绍!!!
    我们的人工智能算法‘’全家桶‘’:监督学习算法线性回归:用于建立自变量和因变量之间的线性关系模型,通过最小化预测值与真实值之间的误差平方和来确定模型参数,常用于预测数值型数据,如房价预测、销售额预测等1。逻辑回归:一种分类算法,用于解决二元分类问题,通过将线性回归的结果......
  • 计算机图形学——射线与三角形相交检测_Möller-Trumbore算法及推导过程(涉及标量三重
    1.标量三重积1.1标量三重积的定义标量三重积(scalartripleproduct)是一个结合点积和叉积的运算,定义为:a⋅(b......
  • 2024/12/25 任务【multi-objective optimization algorithm 多目标优化算法】解决问题
    知识点:Git配合Github的简单使用,硕士开题报告:选题意义(10分),难易程度(5分),对国内外现状的综述(5分)论文的开题报告,写好这些就够了!_哔哩哔哩_bilibili:写清楚研究方向研究的意义现在做到什么程度存在哪些问题你想怎么解决准备用哪些数据去验证你的成果参考文献Github新手够用指......