008、相交链表

ops/2024/10/19 5:05:03/

0、题目描述

相交链表
在这里插入图片描述

1、法1

嵌套循环,从listA的第一个节点开始与listB的每个节点比对,有相同的就返回这个节点。
时间复杂度是n^2

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{struct ListNode* pa = headA;struct ListNode* pb = headB;while (pa){pb = headB;while (pb){if (pa == pb){return pa;}pb = pb->next;}pa = pa->next;}return NULL;
}

2、法2

不用循环的方式找交点,如果双指针一起走的话,listA和listB的长度不同,容易错过交点位置。
所以先求listA和listB的长度,然后对齐一下,再双指针一起走就可以了。
如果有交点,尾节点一定是一样的,让长链表的指针先走一会儿,再齐头并进,就能找到交点。在这里插入图片描述
如图,让listB的指针先走1下,就可以齐头并进了。lenB - lenA = 1

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{int lenA = 1;   int lenB = 1;struct ListNode* curA = headA;    struct ListNode* curB = headB;while (curA->next){curA = curA->next;lenA++;}while (curB->next){curB = curB->next;lenB++;}if (curA != curB)return NULL;else{//注意这里的条件LenA > lenB必须一样,在一样的条件下做出不一样的选择。struct ListNode* LongList = lenA > lenB ? headA : headB;struct ListNode* ShortList = lenA > lenB ? headB : headA;//abs是求绝对值的宏,这里的gap代表长度差int gap = abs(lenA - lenB);while (gap--){LongList = LongList->next;}//while (LongList->next){if (LongList == ShortList)break;LongList = LongList->next;ShortList = ShortList->next;}return LongList;}
}

在这里插入图片描述


http://www.ppmy.cn/ops/126639.html

相关文章

【大数据技术基础 | 实验一】配置SSH免密登录

文章目录 一、实验目的二、实验要求三、实验原理(一)大数据实验一体机(二)SSH免密认证 四、实验环境五、实验内容和步骤(一)搭建集群服务器(二)添加域名映射(三&#xff…

Python 程序打包

将 Python 程序打包成可以在 Windows 和 CentOS 上运行的可执行程序,通常需要使用不同的工具和方法。下面介绍如何在两种平台上将 Python 程序打包为可执行文件。 1. 打包 Python 程序为 Windows 可执行文件 在 Windows 上,最常用的打包工具是 PyInsta…

在 Jupyter Notebook 中,无法看到特定 Conda 环境的内核

问题概述 在 Jupyter Notebook 中,无法看到特定 Conda 环境的内核,导致无法在该环境下运行代码。这通常是由于内核未正确注册到 Jupyter 所致。 常见原因 未安装 ipykernel:每个 Conda 环境需要安装 ipykernel 才能作为 Jupyter 内核使用。…

Android 下通过触发 SIGTRAP 信号实现反调试

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 详细的 Linux 信号列表 Linux 信号是一种用于进程间通信(IPC)和异常处理的机制。以下是详细的 Linux 信号列表,包含信号名…

理解学习JavaScript当中的混入操作(Mixin)

介绍 混入(Mixin) 是一种代码复用的模式。它的主要目的是将一个对象的功能“混入”到另一个对象中,而不是通过继承。这种模式通常被用来在多个类之间共享功能,而无需使用复杂的继承层次。 在 JavaScript 中,混入可以…

Python网络爬虫

随着互联网的迅猛发展,数据成为了新的“石油”。人们对于信息的需求日益增涨,尤其是在市场分析、学术研究和数据挖掘等领域。网络爬虫作为一种自动提取网络数据的技术,因其强大的能力而备受关注。而Python,凭借其简洁的语法和丰富…

10.13论文阅读

通过联合学习检测和描述关键点增强可变形局部特征 摘要 局部特征提取是计算机视觉中处理图像匹配和检索等关键任务的常用方法。大多数方法的核心理念是图像经历仿射变换,忽略了诸如非刚性形变等更复杂的效果。此外,针对非刚性对应的新兴工作仍然依赖于…

Ping32运维中心工具:提升企业IT管理效率的利器

在当今数字化时代,信息技术的高效管理对企业的运营至关重要。Ping32运维中心工具应运而生,为企业提供了一整套便捷的运维解决方案,帮助IT团队高效管理网络与设备,确保业务连续性。 一体化监控平台 Ping32运维中心工具提供了一体化…