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

news2024/12/26 21:39:45

题目

在这里插入图片描述

解析

题目要求

  1. 如果相交 就返回交点
  2. 如果不相交 就返回NULL

思路

1.通过题目的描述我们可以知道,两个单链表相交只有一种形式
在这里插入图片描述

并不存在下面的的形式
在这里插入图片描述
我们已经明确了单链表相交的形式, 那我们要如何判断两个单链表相交呢
这里给出一种做法,如果两个单链表相交,那么它们的最后一个元素肯定是一样的
如上图,所以我们可以写出这样的代码来判断他们相不相交
这一步是找出最后的那个元素

while(tailA != NULL)   // tailA 是指向单链表A头节点的指针
{
  tailA = tailA->next;
}
while(tailB != NULL)   // tailB 是指向单链表B头节点的指针
{
  tailB = tailB->next;
}

这一步是判断最后的元素相不相等

if( tailA != tailB)
{
  return NULL;
  }

如果相等就说明这两个单链表是相交的 就可以进入下一步了
即: 如何返回第一个相交的交点?
分析:
如果这两个单链表的长度是相同的话,(假设这两个单链表是A,B),要找第一个相交的点就简单的多,直接让A的指针(指向头节点的)和B的指针(指向头节点的)一起走,边走边判断,如果不相等就继续走,如果相等就可以停下来返回当前节点的地址了。在这里插入图片描述
如图A B 都走三步就到达 交点了
可是,一般情况下,这两个链表的长度都不相等,那咋办?
不相等就把它变成相等的嘛,让长的那个链表多走几步,走到和短的链表一样长,然后两个链表在一起走,这样就行了。
所以我们还要比较链表的长度还要算出长了多少

看代码

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)\
{
    //替身
    struct ListNode *tailA = headA;
    struct ListNode *tailB = headB;
    //计数
    int lenA = 1, lenB = 1;
   //找尾
   while(tailA != NULL)
   {
       tailA = tailA->next;
       ++lenA;
   }
    while(tailB != NULL)
    {
        tailB = tailB->next;
        ++lenB;
    }
   if(tailA != tailB)
   return NULL;
   //确定谁长
   struct ListNode* longList = headA;
   struct ListNode* shortList = headB;
   if(lenA < lenB)
   {
      longList = headB;
      shortList = headA;
   }

   //长的多走几步
   int gap = abs(lenA-lenB);   //abs 是求绝对值的
   while(gap--)
   {
       longList = longList->next;
   }
  //然后两个一起走找相等的
  while(longList != shortList)
  {
      longList = longList->next;
      shortList = shortList->next;
  }
  
   return longList;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/493069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql安装5分钟解决

文章目录 1.下载安装包&#xff1a;2.MySQL的初始配置3.安装mysql的服务&#xff1a;4.初始化MySQL命令&#xff1a;5.开启mysql服务命令&#xff1a;6.登录验证&#xff1a;7.修改密码&#xff1a; 1.下载安装包&#xff1a; 直接通过这里安装MYSQL5.7下载链接 或者进入MySQL…

干翻Mybatis源码系列之第七篇:Mybatis提供的集成缓存方案

第一章&#xff1a;Mybatis Orm的缓存 Mybatis定义了一个对象缓存&#xff0c;是Mybatis对缓存的封装&#xff0c;为了屏蔽实现的差异&#xff0c;这被定义成了一个接口Interface&#xff0c;这样的话&#xff0c;Mybatis的缓存基本上是存储于JVM内存中的。 一&#xff1a;Ca…

信息技术服务知识笔记

一、运维 1、基础环境运维服务 对保证信息系统正常运行所必需的电力、空调、消防、安防等基础环境的运维。包括&#xff1a;机房电力、消防、安防等系统的理性检查及状态监控、相应支持、故障处理、性能优化等服务 2、硬件运维服务 对硬件设备&#xff08;网络、主机、存储…

6.2.1mnist _eval

之前在调试6.2.1mnist _eval代码的时候&#xff0c;出现了下面的错误 //下面不阐述本人遇到的错误&#xff0c;直接告诉大家解决办法&#xff08;以老师给的源代码进行演示&#xff09; 首先&#xff0c;打开第6章的源代码 //点击程序与数据拆分的文件夹&#xff0c; 并将三个…

3、Flutter项目搭建

一、搭建项目 1.1 搭建空壳项目 接上篇的项目搭建、本篇将继续搭建各个界面.当BottomNavigationBar搭建起来后,在各个界面,没有显示对应的元素,因此我们在包含它的Scaffold中,添加body,这样让每个界面撑起来.每次点击就切换对应的界面. 那么我们创建一个_RootPageState中的私…

【Python】scikit-plot可视化模型(含源代码)

文章目录 一、前言二、功能1&#xff1a;评估指标可视化2.1 scikitplot.metrics.plot_confusion_matrix2.2 scikitplot.metrics.plot_roc2.3 scikitplot.metrics.plot_ks_statistic2.4 scikitplot.metrics.plot_precision_recall2.5 scikitplot.metrics.plot_silhouette2.6 sci…

操作系统学习01

1、什么是操作系统&#xff1f; 通过以下四点可以概括操作系统到底是什么&#xff1a; 操作系统&#xff08;Operating System&#xff0c;简称 OS&#xff09;是管理计算机硬件与软件资源的程序&#xff0c;是计算机的基石。操作系统本质上是一个运行在计算机上的软件程序 &a…

微前端 qiankun@2.10.5 源码分析(一)

微前端 qiankun2.10.5 源码分析&#xff08;一&#xff09; 前言 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。 Techniques, strategies and recipes for building a modern web app with multiple teams that can ship feat…

Figma转换为sketch,分享这3款工具

在我们的设计工作中&#xff0c;我们经常会遇到各种各样的设计文件相互转换的问题。 你经常为此头疼吗&#xff1f;当你遇到Figma转换Sketch文件的问题时&#xff0c;你是如何解决的&#xff1f;Figma转换Sketch文件有工具吗&#xff1f; 根据众多设计师的经验&#xff0c;本…

在竞争激烈的移动应用市场中获得成功,掌握决胜Framework技术

为何要学习framework&#xff1f; Framework&#xff0c;指的是对应用程序开发所需的核心工具和组件的封装和提供。在Android开发中&#xff0c;Framework是整个开发过程中的核心组成部分&#xff0c;提供了许多功能和服务&#xff0c;包括UI组件、数据存储、网络通信、多媒体…

第二十四章 策略模式

文章目录 前言传统方式解决鸭子问题完整代码抽象鸭子类野鸭子类北京鸭子类玩具鸭子类 一、策略模式基本介绍二、策略模式解决鸭子问题完整代码飞翔接口 FlyBehavior飞翔接口的子类实现飞翔技术高超 GoodFlyBehavior不会飞翔 NoFlyBehavior飞翔技术一般 BadFlyBehavior其他行为接…

文献阅读 Meta-SR: A Magnification-Arbitrary Network for Super-Resolution

题目 Meta-SR: A Magnification-Arbitrary Network for Super-Resolution Meta-SR: 用于超分辨率的任何放大网络 摘要 由于DCNN的发展&#xff0c;最近关于超分辨率的研究取得了巨大成功。然而&#xff0c;任意比例因子的超分辨率长期以来一直被忽视。以往的研究者大多将不同…

Stable-Diffusion AI画画本地搭建详细步骤

ChatGPT出来后&#xff0c;第一次感觉到人工智能真的可能要来了&#xff0c;因此也顺便尝试了下开源AI画画的搭建。网络上写的教程总是不那么面面俱到&#xff0c;因此本文参考了3篇文章才成功把Stable-Diffusion 本地搭建搭建了起来。参考教程在文末。 本文是本地搭建AI画画&a…

C/C++内存泄露检查利器—valgrind

1、Valgrind概述 Valgrind是一套Linux下&#xff0c;开放源代码&#xff08;GPL V2&#xff09;的仿真调试工具的集合。 Valgrind由内核&#xff08;core&#xff09;以及基于内核的其他调试工具组成。内核类似于一个框架&#xff08;framework&#xff09;&#xff0c;它模拟…

Android中的GPS开发

GPS简介 Gobal Positioning System&#xff0c;全球定位系统&#xff0c;是美国在20世纪70年代研制的一种以人造地球卫星为基础的高精度无线电导航的定位系统&#xff0c;它在全球任何地方以及近地空间都能够提供准确的地理位置、车行速度及精确的时间信息&#xff1b;它是具有…

2023年房地产抵押贷款研究报告

第一章 概述 房地产抵押贷款是一种以房地产为抵押品的贷款形式&#xff0c;包括个人和企业两种情况。个人房地产抵押贷款是指个人将名下房产作为抵押品向银行或其他金融机构申请贷款&#xff0c;而企业房地产抵押贷款则是指企业将自己名下的商业房产作为抵押品向金融机构申请贷…

202309读书笔记|《野性之美:非洲野生动物初窥》——走进自然界的野性之美

《野性之美: 非洲野生动物初窥》微读的一本书&#xff0c;图片居多&#xff0c;非常有视觉上的震撼。拍摄者也是我们孙姓的一员&#xff0c;孙长智。正如作者所说&#xff0c;与自然对话&#xff0c;你会感悟到生命之美、竞争之美、进化之美、和谐之美&#xff01; 我喜欢自然…

SPSS如何绘制常用统计图之案例实训?

文章目录 0.引言1.绘制简单条形图2.绘制分类条形图3.绘制分段条形图4.绘制简单线图5.绘制多重线图6.绘制垂直线图7.绘制简单面积图8.绘制堆积面积图9.绘制饼图10.绘制直方图11.绘制简单散点图12.绘制重叠散点图13.绘制矩阵散点图14.绘制三维散点图15.绘制简单箱图16.绘制分类箱…

【markdown工具配合图床】PicGo图床配置教程,一秒读懂配置

前言 看到这篇文章的大佬&#xff0c;我默认大家都会配置git&#xff0c;已经配置好ssh公钥。 此时你看到的这篇文章就是基于markdown工具&#xff08;VSCode&#xff0c;Typora&#xff09;编写的。 PicGo作为图床转换工具&#xff0c;并配合gitee作为图片服务器&#xff0…

java元注解和自定义注解的区别

Java的元注解和自定义注解是两个不同的概念。 元注解是Java内置的一组用于修饰其他注解的注解&#xff0c;包括Retention、Target、Inherited和Documented。它们可以控制被修饰的注解的保留策略、目标范围、是否继承等属性&#xff0c;并且可以在编写自定义注解时使用。 Retent…