力扣刷题160 相交链表

题目

力扣题目地址,点此可直接跳转

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

图示两个链表在节点 c1 开始相交:
在这里插入图片描述


来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/intersection-of-two-linked-lists/description/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路一:集合法

使用set集合(这个简单就不画图了)

1、创建一个Hashset
2、依次遍历链表A的节点,并存入集合中
3、遍历链表B的节点
4、如果B的某个节点在集合中存在,返回

代码
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {HashSet set = new HashSet();  // 集合,用来存储某个链表遍历的节点while(headA!=null){     // 遍历headA链表set.add(headA);     // 我们这里将headA的节点存入set中headA = headA.next;  // 添加完毕后别忘记将headA指向下一个}while(headB!=null){             // 遍历headB链表if(set.contains(headB)){    // 判断headB的节点是否存在于set结合中return headB;}headB = headB.next;         // 不在集合中,指向下一个}return null;    // 遍历完都没有,返回null}
}

说明:
1、空间复杂度:将一个链表节点均存储到set集合,空间复杂度为O(N)
2、时间复杂度:(set集合底层是红黑树,添加和查询的事件复杂度为O(logN))最坏情况下需要将另外一个链表都遍历一遍,所以时间复杂度为O(NlogN)

思路二:双指针法

从链表长度入手(直接看图)

在这里插入图片描述

代码
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {int lengthA = getLength(headA);	// getLength方法需要自己写int lengthB = getLength(headB);// 判断headA和headB哪个长,让长的往后移动if(lengthA>lengthB){       // headA长就先让headA往后走几步headA = move(lengthA-lengthB,headA);  // 调用移动方法} else if(lengthB>lengthA){   // headB长就先让headB往后走几步headB = move(lengthB-lengthA,headB);  // 调用移动方法}// 此时两个链表的长度相等while(headA!=null && headB!=null){if(headA==headB){return headA;   // 这里返回谁都行}headA = headA.next;headB = headB.next;}return null;}// 【方法】查询链表的长度public int getLength(ListNode head){int count = 0;while(head!=null){head = head.next;count++;}return count;}// 【方法】根据链表长度差,移动链表public ListNode move(int size,ListNode node){while(size>0){node = node.next;size--;}return node;}
}

说明:
1、空间复杂度:无额外的空间开辟,为O(1)
2、时间复杂度:最坏情况下需要将两个链表都遍历一遍为O(N)

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

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

相关文章

60、redis安装和部署

一、关系型数据库与非关系型数据库 1.1、关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上一般面向于记录。SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言&#xff0…

Laravel API资源收集器:打造高效数据响应的秘诀

Laravel API资源收集器:打造高效数据响应的秘诀 引言 在构建API时,数据的响应格式对于客户端的易用性和API的可维护性至关重要。Laravel框架提供了一种优雅的方式来处理API响应,即API资源(API Resources)和资源收集器…

SQL进阶技巧:如何分析共同好友问题?

目录 0 需求 1 数据准备 2 数据分析 3 小结 0 需求 给定每个用户的好友列表,好友关系是互相对称的,返回任意两个用户的共同好友列表 1 数据准备 with common_friend as( select A as id , B,C,D as friends union all select B as id , A,C,E as friends union all s…

pycharm 新建Python项目 使用anaconda环境

1.pycharm 新建完Python项目 2.文件-设置-具体项目-Python解释器-添加解释器-Conda执行文件选择你自己anaconda安装目录下Scripts\conda.exe -加载环境-选择现有的Conda环境或者新建一个环境

将gitee 上的nvim 配置 从gitee 上下载下来,并配置虚拟机

首先是下载 gitee 上的配置。 然后是 配置 tmux 然后是配置nvim . 1 在init.lua 文件中注释掉所有的与第三方插件有关的内容。 2 在packer 的文件中 , 注释掉所有的与 第三方插件有关的代码。 3 首先要保证 packer 能够正确的安装。 4 然后开始 安装 所有的插件…

自动化立体库各种故障解除方案

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 完整版文件和更多学习资料,请球友到知识星球【智能仓储物流技术研习社】自行下载 堆垛机故障解除方案核心内容: 故障代码与可能原因: F01&#xff…

SpringDataJPA(三):多表操作,复杂查询

一、Specifications动态查询 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询。相比JPQL,其优势是类型安全,更加的面向对象。 import …

Python Web开发:打造高效REST API

Python Web开发:打造高效REST API 在现代网络应用中,RESTful APIs已经成为前后端交互的标准之一。Python,凭借其强大的库和框架支持,使得创建高效且可扩展的REST API变得简单。本文将介绍使用Python进行Web开发时如何打造高效的R…

五大AI测试开源框架及使用方法介绍

AI测试框架是一套系统的测试工具和方法,包括测试的规范和基础代码,涵盖了一系列的测试思想和方法。这些框架可以帮助开发者和测试人员对AI模型进行测试,确保AI模型在真实世界的应用中能够达到预期的效果。接下来的内容,我们将介绍…

可视化目标检测算法推理部署(一)Gradio的UI设计

引言 在先前RT-DETR模型的学习过程中,博主自己使用Flask框架搭建了一个用于模型推理的小案例: FlaskRT-DETR模型推理 在这个过程中,博主需要学习Flask、HTML等相关内容,并且博主做出的页面还很丑,那么,是…

大模型微调:参数高效微调(PEFT)方法总结

PEFT (Parameter-Efficient Fine-Tuning) 参数高效微调是一种针对大模型微调的技术,旨在减少微调过程中需要调整的参数量,同时保持或提高模型的性能。 以LORA、Adapter Tuning 和 Prompt Tuning 为主的PEFT方法总结如下 LORA 论文题目:LORA:…

[Linux安全运维] MySQL 数据库安全配置

MySQL 安全配置 1 .1 MySQL备份 1 .1 .1 命令 1.数据库备份 mysqldump -uroot -p123456 bbs > /tmp/bbs.sql2.删除数据库 drop database bbs;3.创建数据库 create database bbs character set utf8;4.导入备份 mysql -uroot -p123456 bbs < /tmp/bbs.sql5.sql 语句…

学懂C语言(二十五):深入理解 C语言结构体 位域 的概念

目录 一、位域的基本概念 二、位域的定义 三、位域的内存分配和大小计算 示例1&#xff1a;简单位域 示例2&#xff1a;跨越多个存储单元 注意事项 结构体对齐控制 总结 C语言中的位域&#xff08;Bit-Field&#xff09;是一种特殊的数据结构&#xff0c;允许在结构体中…

java计算器,输入公式和对应变量的值

目标&#xff1a;最近想写个东西&#xff0c;本质就是一个计算器&#xff0c;我们可以输入公式&#xff08;例如&#xff1a;ab&#xff09;&#xff0c;然后把公式的值&#xff08;a:10,b:20&#xff09;也输入进去。最后得到结果。核心&#xff1a;这个想法核心部分就是给一个…

CSP:内容安全策略的前端深入解析

CSP&#xff1a;内容安全策略的前端深入解析 在当今的网络安全环境中&#xff0c;内容安全策略&#xff08;Content Security Policy&#xff0c;简称CSP&#xff09;是一种至关重要的安全机制。作为前端开发专家&#xff0c;深入了解并合理应用CSP&#xff0c;对于提升Web应用…

OpenCV C++的网络实时视频流传输——基于Yolov5 face与TCP实现实时推流的深度学习图像处理客户端与服务器端

前言 在Windows下使用TCP协议&#xff0c;基于OpenCV C与Yolov5实现了一个完整的实时推流的深度学习图像处理客户端与服务器端&#xff0c;为了达到实时传输的效果&#xff0c;客户端使用了多线程的方式实现。深度学习模型是基于onnxruntime的GPU推理。&#xff0c;实现效果如…

链表的回文结构 C语言

链表的回文结构_牛客题霸_牛客网 (nowcoder.com) (点击前面链接即可查看题目) reverseList函数请参考:反转链表 - 力扣&#xff08;LeetCode&#xff09;C语言-CSDN博客 middleNode函数请参考:链表的中间结点 - 力扣&#xff08;LeetCode&#xff09;C语言-CSDN博客 链表:1-&…

SpringCloud与Eureka、Ribbon、Hystrix、Fegin、Gateway

SpringCloud 一、概念二、作用(优点)三、缺点四、核心组件1、网关2、注册中心3、负载均衡4、远程调用5、熔断器 一、概念 微服务框架的一站式解决方案&#xff0c;集成多个Netflix公司开发组件&#xff0c;如Hystrix&#xff0c;Eureka、Zuul等。二、作用(优点) 1.服务内部关…

Web基础、apache和nginx的知识及服务搭建

一、Web基础概念和常识 Web&#xff1a;为用户提供的⼀种在互联网上浏览信息的服务&#xff0c;Web 服务是动态的、可交互的、跨平台的和图形化的。 Web 服务为⽤户提供各种互联网服务&#xff0c;这些服务包括信息浏览服务&#xff0c;以及各种交互式服务&#xff0c;包括聊…