经典OJ题:单链表相交

目录

题目:

链表相交🍌的概念:

单链表相交🍌主要的问题:

思路的分析🍌:

问题的回答:

如何判断相交🍌:

如何寻找交点🍌:

代码演示分析:


题目:

有两个链表A、B,如果链表相交,返回链表A、B相交的节点,如果不相交返回NULL

题源: 160. 相交链表 - 力扣(LeetCode)

链表相交🍌的概念:

对于链表相交,更具单链表的特性,链表相交应该呈现的是一个Y型图或者一个U型图,但却对不是一个X型图。

如图,是一个X型图,这种图是错误的!并不是属于单链表相交!

单链表相交🍌主要的问题:

  1. 如何判断是否相交?
  2. 如何寻找相交的交点?

思路的分析🍌:

假如设立两个指针,分别指向当前节点的下一个节点,并且判断两个节点的空间地址是否一样,当空间地址一样时,便找到了交点。

但是!这种解法的局限性是当A、B两个链表的长度不一样时,我们会错过相交的节点部分。

又假设,设立两个指针,分别指向两两个链表的节点,并且判断两个节点中的数据是否一样,如果一样,则找到了交点,但是链表中的数据并没有说明是不重复的,很容易出现错误,如下图所示。

暴力求解法,使用指针对链表A的节点进行遍历,使用另一个指针,指向链表B的节点,用链表A中的每一个节点对链表B的每一个节点进行对比判断,判断空间地址是否一样。

但是暴力求解法的最坏的结果就是二者没有焦点,但是A中的所有节点都要和B中的所有节点进行判断,这导致了时间复杂度因为操作的频繁性抵达了最高------两个链表都要遍历,且都要重复进行判断对比,导致时间复杂度变成了O(N^2)

问题的回答:

如何判断相交🍌:

如果相交那么链表A和链表B的尾节点一定是同一个空间地址!或者说二者的尾节点相等!

如何寻找交点🍌:

我们可以更具距离差,来拉开两个指针走向交点的时间。

也就是说,设立两个指针前,得出两个链表的长度,之后算出长度差

然后将较长的那个链表设置为long指针指向,然后long指针先再这个链表中走出对应的长度差后,和另一个指针short一起按照相同的速度朝前走,并且同时进行对比判断,当两个指针指向的空间地址一样时,那么返回指针,得出相交的节点。

代码演示分析:

相关推荐
好奇龙猫4 分钟前
大学院-筆記試験練習:线性代数和数据结构(8)
数据结构·线性代数
WX-bisheyuange4 分钟前
基于SpringBoot的诊疗预约平台
java·spring boot·后端·毕业设计
世人万千丶4 分钟前
鸿蒙跨端框架Flutter学习day 1、变量与基本类型-智能家居监控模型
学习·flutter·ui·智能家居·harmonyos·鸿蒙·鸿蒙系统
阳光九叶草LXGZXJ4 分钟前
达梦数据库-学习-41-表大小快速估算
linux·运维·数据库·sql·学习
SimonKing6 分钟前
基于Netty的WebSocket客户端
java·后端·程序员
世人万千丶7 分钟前
鸿蒙跨端框架Flutter学习day 1、变量与基本类型-咖啡店点餐逻辑
学习·flutter·ui·交互·鸿蒙·鸿蒙系统
DYS_房东的猫8 分钟前
《 C++ 零基础入门教程》第8章:多线程与并发编程 —— 让程序“同时做多件事”
开发语言·c++·算法
ekkcole12 分钟前
java实现对excel模版填充保存到本地后合并单元格并通过网络下载
java·开发语言·excel
Zoey的笔记本15 分钟前
「软件开发缺陷管理工具」的闭环追踪设计与自动化集成架构
java·服务器·前端
لا معنى له17 分钟前
学习笔记:少样本学习
人工智能·笔记·深度学习·学习·机器学习