链表OJ----相交链表找交点

news2024/11/16 9:42:15

https://leetcode.cn/problems/intersection-of-two-linked-lists/description/

        e29fad781ff343f498f54a15cc7a2276.png

         1、长链表先走,然后二者一起走

        由于两个链表可能不一样,就不好控制移动。那么我们可以让长的链表先走二者的长度差的长度,使剩下部分和短链表一样长。然后二者一起走动,去寻找交点。

2db40b53314f491aaa5424aff5a6d039.png

struct ListNode* getIntersectionNode(struct ListNode* headA,struct ListNode* headB) {
    if (headA == NULL || headB == NULL)
        return NULL;

    int lenA = 1,
        lenB =1; //记录长度,由于二者此时不为空链表,并且我们要找到最后一个结点,而不是空结点,所以这里起始长度为1
    struct ListNode *pa = headA, *pb = headB;
    while (pa->next != NULL) //找最后一个结点
    {
        lenA++;
        pa = pa->next;
    }
    while (pb->next != NULL) //找最后一个结点
    {
        lenB++;
        pb = pb->next;
    }
    if (pa != pb) //判断最后一个结点是否相等
        return NULL;
    int dis = abs(lenA - lenB);
    if (lenA > lenB) // A走
    {
        while (dis > 0) {
            headA = headA->next;
            dis--;
        }
    } else // B走
    {
        while (dis > 0) {
            headB = headB->next;
            dis--;
        }
    }

    //一起走
    while (headA != headB) {
        headA = headA->next;
        headB = headB->next;
    }
    //如果找到就返回headA
    //如果没找到,那么二者最终都为NULL
    return headA;
}

        2、逆置链表

        虽然题目说不能改变链表结构,但逆置链表也是一种办法,我们可以参考。代码就不写了,看看分析图即可。

9b79e71199264ee2bbd0927e97dd3b94.png

        3、双指针法

        ​​​​​​​

         下面我们来验证一下思路是否正确:

        假设headA长为a,headB长为b:

        情况1:假设a == b,pa和pb都走了x的长度(x<a),此时pa == pb != NULL,则交点找到;假设pa和pb都走了a的长度,此时pa == pb == NULL,则没有交点。

        情况2:假设a!=n,pa先走了a,再走x(x<b),pb先走了b,再走y(y<a),此时pa == pb != NULL,则交点找到;如果x == b,y == a,则pa走了a+b,pb走了a+b,此时pa == pb == NULL,则没有交点。

struct ListNode* getIntersectionNode(struct ListNode* headA,struct ListNode* headB) {
    if (headA == NULL || headB == NULL)
        return NULL;

    struct ListNode *pa = headA, *pb = headB;
//如果pa == pb != NULL,就是找到交点,结束循环 
//当pa ==pb == NULL,要么是两个一样长的链表,各自都走完了,但是没有交点;要么是pa和pb都将链表AB走了一遍
    while (pa != pb){
        if (pa == NULL) {
            pa = headB;
        } else {
            pa = pa->next;
        }
        if (pb == NULL) {
            pb = headA;
        } else {
            pb = pb->next;
        }
    }
    return pa;
}

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

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

相关文章

操作无法完成,因为文件已在Windows资源管理器中打开,如何解决?以及如何将哔哩哔哩下载好的视频导出到电脑中播放?— 以vivo手机为例

前言 想删除流氓软件的时候&#xff0c;提示操作无法完成&#xff0c;因为文件已在Windows资源管理器中打开&#xff0c;但打开任务管理器&#xff0c;似乎又没有符合的正在执行的程序&#xff0c;更别说打开让人看到头疼的资源监视器了&#xff0c;本文将用一招解决如上问题 …

【RF FILTER 仿真】滤波器 Ansys Electronics not ADS

第一&#xff0c;声明 全网搜索&#xff0c;用这个HFSS继承的介绍非常少&#xff0c;并且没有什么指导意义。所以有必要写一下&#xff0c;就像之前的xpedition,总要挑战一下吧。本文仅仅和大家学习研究&#xff0c;对比ADS体会一下差别。 第二&#xff0c;记录直接开始&…

微信小程序如何解决botton按钮对齐问题

如果botton不在其他控件下层&#xff0c;或者上层控件类型不为flex&#xff0c;可以用float调整botton显示位置&#xff0c;如floatright&#xff0c;则botton显示在右侧。 <button type"primary" style"float: right;">测试</button><vie…

什么是JMeter?我们为什么要用JMeter做性能测试

什么是JMeter&#xff1f;我们为什么要用JMeter做性能测试 什么是JMeter&#xff1f;为什么选择JMeterJMeter的优点JMeter是如何工作的 什么是JMeter&#xff1f; Apache JMeter TM是纯Java开源软件&#xff0c;最初由Apache软件基金会的Stefano Mazzocchi开发&#xff0c;旨在…

运维神器Ansible的常用模块

引言&#xff1a;话不多说&#xff0c;今天分享一下Ansible的常用模块&#xff0c;建议收藏哦 1、ping模块 ping模块可以进行主机连通性测试 命令格式 ansible 主机或主机组 -m ping 例&#xff0c;成功显示如下&#xff1a; 2、command 模块 command模块可以直接在远程主机…

条件语句及if语句,case语句

文章目录 条件语句一、测试1、概述格式 2、文件测试2.1 格式2.2 常用操作符 3、比较整数数值3.1 格式3.2 常用操作符 4、字符串比较4.1 格式4.2 常用操作符 5、逻辑测试&#xff08;短路运算&#xff09;5.1 格式5.2 常用操作符 6、双中括号6.1 格式6.2 说明 二、if语句1、单分…

DA14531平台secondary_bootloade工程修改笔记

DA14531平台secondary_bootloade工程修改笔记 1.支持在线仿真 初始时加入syscntl_load_debugger_cfg(); 表示可以重复Jlink连接调试仿真 2.支持串口烧录&#xff0c;和支持单线线写 utilities\secondary_bootloader\includes\bootloader.h /************** 2-wire UART supp…

程序媛的mac修炼手册-- 如何用Python节省WPS会员费

上篇分享了如何用微博爬虫&#xff0c;咱举例爬了女明星江疏影的微博数据。今天就用这些数据&#xff0c;给大家安利一下怎么用Python实现WPS中部分Excel付费功能。 MacOS系统自带的工具&#xff0c;绝大多数都非常顶&#xff0c;除Numbers外。当然&#xff0c;page比起word来&…

ubuntu 22.04 安装mysql-8.0.34

ubuntu 22.04 安装mysql-8.0.34 1、基础安装配置 更新软件包&#xff1a; sudo apt update查看可用软件包&#xff1a; sudo apt search mysql-server安装最新版本&#xff1a; sudo apt install -y mysql-server或者&#xff0c;安装指定版本&#xff1a; sudo apt inst…

vue3实现在浏览器之外打开新窗口,新窗口只有原来的一半并且居中显示

首先在router下的index.js添加路由地址 {name: attribute,path: /attribute,component: () > import(../views/attribute.vue)},然后在方法中调用 //点击按钮 function clicek() {openCenteredWindow(/attribute, 1400, 800);} // 计算居中位置function calculateCenterPos…

live555在拉流时应对多路码流传输带宽问题的几种处理思路

处理带宽管理和调整的机制 Live555库本身并没有直接处理带宽管理和调整的机制&#xff0c;因为它主要是一个用于实现RTSP流媒体服务器和客户端的库&#xff0c;而带宽管理通常是在应用层进行处理的。但Live555支持一些基础协议&#xff0c;这些协议可以在应对带宽问题时进行使用…

qt初入门6:QChar和QString相关接口练习

简单了解编码&#xff1a; ​ latin1&#xff08;ISO 8859-1&#xff09;字符集是对ASCII基本字符集的扩展&#xff0c;都是1字节编码。 Unicode编码有多重存储方案&#xff0c;utf-8使用1~4字节编码&#xff0c;最少1字节&#xff1b;utf-16使用2-4字节编码&#xff0c;最少2字…

Zabbix 整合 Prometheus:案例分享与操作指南

一、简介 Zabbix 和 Prometheus 都是流行的开源监控工具&#xff0c;它们各自具有独特的优势。Zabbix 主要用于网络和系统监控&#xff0c;而 Prometheus 则专注于开源的分布式时间序列数据库。在某些场景下&#xff0c;将这两个工具整合在一起可以更好地发挥它们的优势&#…

树,二叉树及其相关知识

1.树概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#…

Eyes Wide Shut? Exploring the Visual Shortcomings of Multimodal LLMs

大开眼界&#xff1f;探索多模态模型种视觉编码器的缺陷。 论文中指出&#xff0c;上面这些VQA问题&#xff0c;人类可以瞬间给出正确的答案&#xff0c;但是多模态给出的结果却是错误的。是哪个环节出了问题呢&#xff1f;视觉编码器的问题&#xff1f;大语言模型出现了幻觉&…

redis集群 —— 高性能

文章目录 前言节点1.1 启动节点 槽指派2.1 记录节点的槽指派信息2.2 传播节点的槽指派信息2.3 记录集群所有槽的指派信息 在集群中执行命令3.1 计算键属于哪个槽3.3 节点数据库的实现 重新分片复制与故障转移 前言 Redis集群是Redis提供的分布式数据库方案&#xff0c;集群通过…

vp9协议笔记

vp9协议笔记&#x1f4d2; 本文主要是对vp9协议的梳理&#xff0c;协议的细节参考官方文档&#xff1a;VP9协议链接&#xff08;需要加速器&#xff09; vp9协议笔记 vp9协议笔记&#x1f4d2;1. 视频编码概述2. 超级帧superframe&#xff08;sz&#xff09;&#xff1a;2. fr…

ZK高可用架构涉及常用功能整理

ZK高可用架构涉及常用功能整理 1. zk的高可用系统架构和相关组件1.1 Quorum机制1.2 ZAB协议 2. zk的核心参数2.1 常规配置2.2 特殊优化配置 3. zk常用命令3.1 常用基础命令3.2 常用运维命令 4. 事务性4.1 数据写流程4.2 数据读流程 5. 疑问和思考5.1 zk不擅长处理哪些场景&…

springboot家乡特色推荐系统源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括家乡特色推荐的网络应用&#xff0c;在外国家乡特色推荐系统已经是很普遍的方式&#xff0c;不过国内的管理网站可能还处于起步阶段。家乡特色推荐系统采用java技术&#xff0…

橘子学Mybatis08之Mybatis关于一级缓存的使用和适配器设计模式

前面我们说了mybatis的缓存设计体系&#xff0c;这里我们来正式看一下这玩意到底是咋个用法。 首先我们是知道的&#xff0c;Mybatis中存在两级缓存。分别是一级缓存(会话级)&#xff0c;和二级缓存(全局级)。 下面我们就来看看这两级缓存。 一、准备工作 1、准备数据库 在此之…