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

相交链表(Leetcode)

 题目分析:

. - 力扣(LeetCode)

相交链表:首先我想到的第一个思路是:如图可知,A和B链表存在长度差,从左边一起遍历链表不好找交点,那我们就从后面开始找,但是这是单链表,没有 prev 指针,所以只能反转链表 A、B。反转之后再从A、B头结点开始就可以找到相遇点,但是题目要求我们不能改变链表的结构,所以此方法不行。

方法一:

思路:

 ①当链表有一个为空,或者两个都为空的时候,直接返回NULL。

 ②因为链表存在差值,结点个数不同,不能一起遍历,所以我们可以求出A和B各自的结点个数,然后求出差值。

③差值有了之后,我们可以让长的链表先走差值步,相对于抹掉了差值。

④最后A、B链表一起走,如果地址相等就表示相遇了,就返回交点处的地址,如果没有相遇,就返回NULL

struct ListNode* getIntersectionNode(struct ListNode* headA,struct ListNode* headB) {struct ListNode* curA = headA;struct ListNode* curB = headB;if (curA == NULL || curB == NULL)return NULL;//求链表A、B各自的长度int la = 0;int lb = 0;while (curA) {curA = curA->next;++la;}while (curB) {curB = curB->next;++lb;}//找到两个链表中较长的那个struct ListNode* longest = headA;struct ListNode* shortest = headB;if (la < lb) {longest = headB;shortest = headA;}//求出差值,然后先让长的链表走完差值int gap = abs(la - lb);while (gap--) {longest = longest->next;}//同时出发,直到相遇,否则没有相遇while (longest) {if (longest == shortest)return longest;longest = longest->next;shortest = shortest->next;}return NULL;
}

 

方法二:

思路:

①当链表有一个为空,或者两个都为空的时候,直接返回NULL。

②相当于两个指针在一个路线上走、走的路程都是一样的

A先走完自己的路程,然后去走B的路程

B先走完自己的路程,然后去走A的路程

A和B走到路一样长

如果存在相遇点,A和B必定会相遇 (如果不是很明白可以对着代码,画图去理解一下)

如果不存在相遇点,就在NULL处相遇

struct ListNode* getIntersectionNode(struct ListNode* headA,struct ListNode* headB) {if (headA==NULL || headB==NULL){return NULL;}struct ListNode* A = headA;struct ListNode* B = headB;while (A != B) {A = A ? A->next : headB; B = B ? B->next : headA;}return A;
}

 

http://www.lryc.cn/news/379826.html

相关文章:

  • 建造者模式(大话设计模式)C/C++版本
  • 【地质灾害监测实现有效预警,44人提前安全转移】
  • Ruby 数据库访问 - DBI 教程
  • Linux环境搭建之CentOS7(包含静态IP配置)
  • Dell戴尔灵越Inspiron 16 Plus 7640/7630笔记本电脑原装Windows11下载,恢复出厂开箱状态预装OEM系统
  • .NET C# 装箱与拆箱
  • springboot与flowable(9):候选人组
  • 为什么要选择华为 HCIE-Security 课程?
  • C++之std::queue::emplace
  • Vue3 - 在项目中使用vue-i18n不生效的问题
  • Day 44 Ansible自动化运维
  • Excel/WPS《超级处理器》功能介绍与安装下载
  • U-Net for Image Segmentation
  • POI导入带有合并单元格的excel,demo实例,直接可以运行
  • 【C语言】解决C语言报错:Use-After-Free
  • C语言经典例题-19
  • AlmaLinux 更换CN镜像地址
  • 【笔记】【矩阵的二分】668. 乘法表中第k小的数
  • 红米手机RedNot11无法使用谷歌框架,打开游戏闪退的问题,红米手机如何开启谷歌框架
  • emqx5.6.1 数据、配置备份与迁移
  • VUE3脚手架工具cli配置搭建及创建VUE工程
  • 前端开发之DNS协议
  • 如何在 Tailwind CSS 中实现居中对齐
  • 【iOS】编译二进制文件说明
  • 红队内网攻防渗透:内网渗透之内网对抗:隧道技术篇防火墙组策略FRPNPSChiselSocks代理端口映射C2上线
  • qt+halcon实战
  • Java_POJO
  • 24年安克创新社招入职自适应能力cata测评真题分享北森测评高频题库
  • OpenCV中的圆形标靶检测——findCirclesGrid()(三)
  • C++拷贝构造函数、运算符重载函数、赋值运算符重载函数、前置++和后置++重载等的介绍