leetcode:交叉链表

题目描述

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

题目分析

我们先要搞清楚一个概念,单链表可以相交,但绝对不会交叉

原因如下:

单链表中,多个结点可以存一个结点的地址,但是一个结点不可能存多个结点的地址

因为每个结点只有一个next

所以链表的相交一定是Y字形的

这里我们要做的有两步:

  • 判断是否相交
  • 找交点

思路一

暴力求解:A链表的所有结点依次去B链表找一遍

注意:一定要用结点的地址去比对

思路二

判断相交:

分别找尾结点,尾结点地址相同就相交

找交点:

算出两个链表的长度,得出两个链表的长度差,让长链表先走差距步,然后同时走,当第一个地址相同的时候,这就是交点

这个算法的时间复杂度是F(3N),即O(N)

完整算法:

我们先定义curA,curB分别指向两个链表,用while循环求长度,并判断是否相交(只有相交了才会有交点)如果不相交则返回NULL,相交再进行下一步

我们得到lenA和lenB,用C语言自带的函数abs求出差距的绝对值

int n=abs(lenA-lenB);

那么谁先走呢,我们用假设法:假设A长B短

如果假设错误,那就纠正过来

让长的先走差距步

然后同时走,想等的时候返回任意一个地址就是交点

代码示例

根据思路二,我们写出代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode *curA=headA,* curB=headB;int lenA=1,lenB=1;while(curA->next){lenA++;curA=curA->next;}while(curB->next){lenB++;curB=curB->next;}if(curA!=curB){return NULL;}int n=abs(lenA-lenB);struct ListNode *longList=headA, *shortList=headB;if(lenB>lenA){longList=headB;shortList=headA;}while(n--){longList=longList->next;}while(longList!=shortList){longList=longList->next;shortList=shortList->next;}return longList;
}

结果就可以通过了

 

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

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

相关文章

【算法挨揍日记】day22——面试题 17.16. 按摩师、213. 打家劫舍 II

面试题 17.16. 按摩师 面试题 17.16. 按摩师 题目描述: 一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找…

国产高云FPGA:纯verilog实现视频图像缩放,提供6套Gowin工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐国产高云FPGA相关方案推荐国产高云FPGA基础教程 3、设计思路框架视频源选择OV5640摄像头配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 Video Frame Buffer 图像缓存DDR3 Memory Interface 4、Go…

Qml使用cpp文件的信号槽

文章目录 一、C文件Demo二、使用步骤1. 初始化C文件和QML文件,并建立信号槽2.在qml中调用 一、C文件Demo Q_INVOKABLE是一个Qt元对象系统中的宏,用于将C函数暴露给QML引擎。具体来说,它使得在QML代码中可以直接调用C类中被标记为Q_INVOKABLE的…

Rust8.2 Fearless Concurrency 无畏并发

Rust学习笔记 Rust编程语言入门教程课程笔记 参考教材: The Rust Programming Language (by Steve Klabnik and Carol Nichols, with contributions from the Rust Community) Lecture 16: Fearless Concurrency 无畏并发 src/main.rs use std::thread; use std::time::Du…

嵌入式Linux开发面试题和答案

熟练的编程语言: 问:“您在嵌入式系统开发中熟练使用哪些编程语言?”答:在嵌入式系统开发中,我熟练使用C、C和Python等编程语言。C语言因其接近硬件的操作和效率而被广泛应用;C则在需要面向对象编程时提供了…

某手机大厂员工爆料:40岁被裁,每月给88000补贴,连续给12个月,第二年减半,感觉废掉了!...

精彩回顾:进了央企,拿了户口,却感觉被困住了。 人生没有所谓的终点,只有不断再出发的起点,裁员只是人生的一个转角,而非尽头。 在时代的浪潮下,即使身处大厂,依然难逃被裁员的命运。…

【KingbaseES】sys_dump命令详解及示例

概述 sys_dump 是一个将 KingbaseES 数据库保存到一个脚本或者归档文件中的工具.这个脚本文件的格式是纯文本,它包含许多 SQL 命令, 这些 SQL 命令可以用于重建该数据库并将之恢复到保存成脚本的时候的状态.要恢复这些脚本&#…

NX二次开发UF_CAM_ask_lower_limit_plane_usage 函数介绍

文章作者:里海 来源网站:里海NX二次开发3000例专栏 UF_CAM_ask_lower_limit_plane_usage Defined in: uf_cam_planes.h int UF_CAM_ask_lower_limit_plane_usage(tag_t object_tag, UF_PARAM_lwplane_usage_t * usage ) overview 概述 Query the usa…

Shell脚本:Linux Shell脚本学习指南(第二部分Shell编程)一

第二部分:Shell编程(一) 这一章我们正式进入 Shell 脚本编程,重点讲解变量、字符串、数组、数学计算、选择结构、循环结构和函数。 Shell 的编程思想虽然和 C、Java、Python、C# 等其它编程语言类似,但是在语法细节方…

PaddleDetection训练目标检测模型

PaddleDetection训练目标检测模型 一,安装标注软件二,数据标注和清洗三,安装PaddleDetection环境四,修改配置文件,本文选择的是 PP-PicoDet算法五,训练模型六,训练完成之后导出模型七&#xff0…

php面向对象和面向过程区别

面向过程编程:是一种传统的编码风格,它将代码组织为一系列函数或过程。这些函数可以采用一系列参数和返回值,来完成特定的任务。面向过程编程侧重顺序和功能性。 面向对象编程:是一种编码风格,它将代码组织为对象&…

04_面向对象高级_final与常量

final 1. 基本介绍 final 关键字是最终的意思,可以修饰(类、方法、变量) 修饰类:该类被称为最终类,特点是不能被继承了修饰方法:该方法被称为最终方法,特点是不能被重写了修饰变量&#xff1…

深入探讨AJAX接口进度监控:实现步骤、代码示例与技术原理

AJAX(Asynchronous JavaScript and XML)是现代Web开发中常用的异步通信技术。本文将详细分析如何通过AJAX实现接口进度监控,提供实用的代码示例、技术原理解析以及优劣势评估,以帮助开发者更好地应用这一技术。 1. 引言 在复杂的…

Java Swing实现员工工资管理系统(含教程) 可带数据库 Java课程设计

7. 员工工资管理系统 视频教程: 【课程设计】员工工资管理系统-Java Swing-你的课程我设计 功能描述: 系统员工有"工号"、 “姓名”、“性别”、“岗位”、 "入职年份 "、"密码"等属性; 员工使用工号密码登录…

MacOs 删除第三方软件

AppStore下载的软件 如果删除AppStore下载的软件,直接长按软件,点击删除或拖到废纸篓就可以完成软件的删除 第三方软件 但是第三方下载的软件,无法拖进废纸篓,长按软件也没有右上角的小叉 可以通过以下方法实现对软件的卸载 …

2023美亚杯个人赛复盘(三)

案件基本情况: (一)案情 2023月8月的一天,香港警方在调查一起网络诈骗案件时,发现有三名本地男子,分別为李大輝(李大辉),浩賢(浩贤)和Elvis CHUI,并确信这三名…

软件安全检测赋能赣州发展,开源网安与赣州国投完成签约

​11月20日,开源网安与赣州章贡区数智国投科技有限公司签订投资协议,签约后双方将在赣州打造软件供应链安全检测中心,以强大的软件测试能力为数字政府、数字经济等领域提供全面安全检测和软件安全运营监测等服务,提升软件的安全与…

2760. 最长奇偶子数组 --力扣 --JAVA

题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 threshold 。 请你从 nums 的子数组中找出以下标 l 开头、下标 r 结尾 (0 < l < r < nums.length) 且满足以下条件的 最长子数组 &#xff1a; nums[l] % 2 0 对于范围 [l, r - 1] 内的所有下标 i &#xff0c…

电商数据|电商API接口|电商数据分析都会用到的接口不用再找了

导读&#xff1a;上半年&#xff0c;网络零售行业发展迅速&#xff0c;货架电商、直播电商、生鲜电商等领域动作频频。京东“百亿补贴”上线&#xff0c;张勇宣布启动“16N”组织变革&#xff0c;盒马启动上市计划&#xff0c;拼多多APP新增直播入口&#xff0c;快手升级货架场…

JavaScript拖放操作的实现

在页面中设置2个框&#xff1a;一个是被拖放的框&#xff0c;一个是拖放的目的地框。在拖动的时候&#xff0c;只有当鼠标位于拖放的目的地框上方的时候&#xff0c;放开鼠标的时候&#xff0c;被拖放的框&#xff0c;才被移动到鼠标所在的位置&#xff1b;而在其他地方放开鼠标…