链表oj3(Leetcode)——相交链表;环形链表

news2024/11/19 2:30:19

一,相交链表

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

1.1分析

看到这个我们首先想到的就是一个一个比较他们的值有相等的就是交点,但是如果a1和b2的值就相等呢?所以这个思路不行,第二种就是依次比较链表,但是这个方法也不行,因为两个链表长度不行不能这样比较。所以根据第二种的思路,我们可以先分别遍历两个链表然后找到长的那个,让它先走他们的差值步,最后再一起遍历,找到他们的交点。
在这里插入图片描述

1.2代码

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    struct ListNode *curA=headA;
    struct ListNode *curB=headB;
    int lenA=1,lenB=1;
    //计算两个链表的长度
    while(curA->next)
    {
        curA=curA->next;
        lenA++;
    }
    while(curB->next)
    {
        curB=curB->next;
        lenB++;
    }
    //不相交
    if(curA!=curB)
    {
        return NULL;
    }
    //相交
    int gap=abs(lenA-lenB);
    //找出长的那一个
    struct ListNode *Longlist=headA;
    struct ListNode *Shortlist=headB;
    if(lenA<lenB)
    {
        Longlist=headB;
        Shortlist=headA;
    }
    //长的先走
    while(gap--)
    {
        Longlist=Longlist->next;
    }
    //一起走找出交点
    while(Longlist!=Shortlist)
    {
        Longlist=Longlist->next;
        Shortlist=Shortlist->next;
    }
    return Longlist;
}

二,环形链表

环形链表(Leetcode)
在这里插入图片描述

2.1分析

这个题目我们可以用我们之前写过的一道oj题来解,那就是快慢指针。
主要思路就是,因为是环形链表他会一直的向前走,所以快指针循环到一定的程度他就一定会和慢的那个指针相遇。

2.2代码

bool hasCycle(struct ListNode *head) {
    struct ListNode *fast;
    struct ListNode *slow;
    fast=slow=head;
    while(fast&&fast->next)
    {
        fast=fast->next->next;
        slow=slow->next;
        if(fast==slow)
        {
            return true;
        }
    }
    return false;
}

三,环形链表 II

环形链表 II(Leetcode)
在这里插入图片描述

3.1分析

这个题目和上面那个有点不同的是他要求我们返回入环的第一个节点。
我们先来进行数学分析。
在这里插入图片描述
然后我们就可直到从头开始走到入口,和从快慢指针相遇的地方开始走,那么他们相遇的位置就是入口。

3.代码

struct ListNode *detectCycle(struct ListNode *head) {
    struct ListNode *slow,*fast;
    slow=fast=head;
    while(fast && fast->next)
    {
        slow=slow->next;
        fast=fast->next->next;

        if(slow == fast)
        {
            struct ListNode *meet=slow;
            while(head!=meet)
            {
                head=head->next;
                meet=meet->next;
            }
            return meet;
        }
    }
    return NULL;
}

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

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

相关文章

xdebug3开启profile和trace

【xdebug开启profiler】 https://xdebug.org/docs/profiler http://www.xdebug.org.cn/docs/profiler 1、php.ini添加下面配置然后重启php容器&#xff1a; xdebug.modeprofile ;这个目录保存profile和trace文件 xdebug.output_dir /var/tmp/xdebugPHP日志提示报错&#xff1a…

ultraEdit正则匹配多行(xml用)

在ultraEdit中&#xff0c;我想选取<channel到</channel>之间的多行&#xff08;进行删除&#xff09;。在perl模式下&#xff0c;命令为“<channel[\s\S]?</channel>”。下面是xml文件&#xff1a; <!--This XML file does not appear to have any sty…

版本控制系统git:一文了解git,以及它在生活中的应用,网站维护git代码,图导,自动化部署代码

目录 1.Git是什么 2.git在生活中的应用 2.1git自动化部署代码 3.网站维护git代码 3.1如何在Git代码托管平台等上创建一个仓库 3.2相关文章 4.ruby实现基础git 4.1.Git add 4.2 Git commit 4.3 Git log 1.Git是什么 Git是一个版本控制系统&#xff0c;它可以追踪文件的…

C++11的一些新特性|线程库|包装器|lambda表达式

文章目录 目录 文章目录 一、可变参数模板 1.可变参数模板 2.STL容器中emplace相关函数接口: 二、lambda表达式 1.c98中的一个例子 2.lambda表达式 三、包装器 1.fuction包装器 四、线程库 1.thread类简单介绍 2.并发和并行的区别 3.线程函数参数 4.原子性操作库…

关于Java多线程的那些事

多线程 多线程1. 关于多线程的理解1.1 进程和线程1.2 并行和并发1.3 线程调度 2. 创建多线程的方式创建线程有哪几种方式&#xff1f;2.1 通过继承Thread类来创建并启动线程的步骤如下&#xff1a;2.2 通过实现Runnable接口来创建并启动线程的步骤如下&#xff1a;2.3 通过实现…

充电江湖暗战,充电运营商为什么忌惮平台崛起?

配图来自Canva可画 话说&#xff1a;“天下大势&#xff0c;分久必合&#xff0c;合久必分”&#xff0c;日前充电运营商与第三方充电平台再次倾情上演分手戏码。 8月中旬&#xff0c;新能源汽车充电运营服务商特来电、星星充电与云快充&#xff0c;毫无预兆的下架第三方充电…

Qt创建线程(线程池)

1.线程池可以创建线程统一的管理线程&#xff08;统一创建、释放线程&#xff09; 2.使用线程池方法实现点击开始按钮生成10000个随机数&#xff0c;然后分别使用冒泡排序和快速排序排序这10000个随机数&#xff0c;最后在窗口显示排序后的数字&#xff1a; mainwindow.h文件…

CATIA | 如何创建曲面点云数据并保存

问题描述 CATIA中创建的曲面模型&#xff0c;如何转换成可读的点云数据&#xff08;点云坐标数据&#xff09;输出保存&#xff1b; 操作流程&#xff08;示例&#xff09; 1、打开软件 2、创建三维曲面模型 &#xff08;具体步骤省略&#xff09; 3、文件另存为“.stl” …

wallet connect简单使用

wallet connect简单使用 准备工作安装配置打包测试 准备工作 新建一个文件夹xxx 右键在终端中打开 npm init -y在文件夹中新建src目录 在src目录中新建index.html和index.js文件 目录大概就这样我这是打包过的 安装 按照官方文档先安装 官方页面长这样 我们需要用到的是we…

基于Dijkstra、A*和动态规划的移动机器人路径规划(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

【软件设计师-中级——刷题记录3(纯干货)】

目录 数据交换模式知识产权与标准化之侵权判断OSI专业模型&#xff1a;7-克制自己的同理心8-不要为不值得的人和事浪费时间9-做个长期主义者 每日一言&#xff1a;持续更新中... 个人昵称&#xff1a;lxw-pro 个人主页&#xff1a;欢迎关注 我的主页 个人感悟&#xff1a; “失…

20 mysql const 查询

前言 这里主要是 探究一下 explain $sql 中各个 type 诸如 const, ref, range, index, all 的查询的影响, 以及一个初步的效率的判断 这里会调试源码来看一下 各个类型的查询 需要 lookUp 的记录 以及 相关的差异 测试表结构信息如下 CREATE TABLE tz_test (id int(1…

基于SpringBoot的蜗牛兼职网站

目录 前言 一、技术栈 二、系统功能介绍 管理员功能模块 用户功能模块 前台首页功能模块 企业功能模块 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#x…

接口测试之什么是接口文档?

一、为什么要有接口文档&#xff1f; 没有接口文档的接口测试都是在抓瞎~前面的接口测试重点讲了协议&#xff0c;也讲了fiddler模拟接口请求&#xff0c;估计大部分还是不太懂怎么下手测试。这里小编专门拿出接口文档来做接口测试参考&#xff08;估计很多测试小伙伴没见过接口…

GDB的TUI模式(文本界面)

2023年9月22日&#xff0c;周五晚上 今晚在看GDB的官方文档时&#xff0c;发现GDB居然有文本界面模式 TUI (Debugging with GDB) (sourceware.org) GDB开启TUI的条件 GDB的文本界面的开启条件是&#xff1a;操作系统有适当版本的curses库 The TUI mode is supported only on…

期刊分类一览

分区情况 jcr分区 中科院分区 EI 理工科 一般是SCI的都是EI 国内的分区

基于eBPF的安卓逆向辅助工具——stackplz

前言 stackplz是一款基于eBPF技术实现的追踪工具&#xff0c;目的是辅助安卓native逆向&#xff0c;仅支持64位进程&#xff0c;主要功能如下&#xff1a; hardware breakpoint 基于pref_event实现的硬件断点功能&#xff0c;在断点处可读取寄存器信息&#xff0c;不会被用户…

【计算机网络】子网掩码、子网划分

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多计算机网络知识专栏&#xff1a;计算机网络&#x1f525; 给大家跳段…

为什么曲面函数的偏导数可以表示其曲面的法向量?

为什么曲面函数的偏导数可以表示其曲面的法向量&#xff1f; 引用资料&#xff1a; 1.知乎shinbade&#xff1a;曲面的三个偏导数为什么能表示法向量&#xff1f; 2.Geogebra羅驥韡 (Pegasus Roe)&#xff1a;偏導數、切平面、梯度 曲面 F ( x , y , z ) 0 F(x,y,z)0 F(x,y,…

Direct3D模板缓存

模板缓存是一个用于获得某种特效的离屏缓存&#xff0c;模板缓存的分辨率与后台缓存和深度缓存的分辨率完全相同&#xff0c;所以像素也是一一对应的&#xff0c;模板缓存允许我们动态的&#xff0c;有针对性的决定是否将某个像素写入后台缓存中。 例如实现镜面效果时&#xf…