数据结构与算法——链表OJ题详解(2)

news2025/7/13 10:22:07

文章目录

  • 一、前言
  • 二、OJ续享
    • 2.1相交链表
    • 2.2环形链表1
    • 2.2环形链表2
  • 三、总结

一、前言

哦了兄弟们,咱们上次在详解链表OJ题的时候,有一部分OJ题呢up并没有整理完,这一个星期呢,up也是在不断的学习并且沉淀着,也是终于把剩下的题给整理完毕了,现在继续分享给大家。

二、OJ续享

2.1相交链表

力扣160 相交链表链接
在这里插入图片描述
首先咱们先来判断什么样的链表才是相交链表:
画图展示:
在这里插入图片描述
那么在判断完毕之后,我们又该如何实现呢?(解题思路请看图中文字)
在这里插入图片描述
代码展示:

typedef struct ListNode ListNode;
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    ListNode* pa = headA;
    ListNode* pb = headB;
    int sizeA = 0;
    int sizeB = 0;
    while(pa)
    {
        sizeA++;//计算A链表的节点个数
        pa = pa->next;
    }
    while(pb)
    {
        sizeB++;//计算B链表的结点个数
        pb = pb->next;
    }
    int gap = abs(sizeA-sizeB);//计算差值
    ListNode* shorth = headA;
    ListNode* longth = headB;
    if(sizeA>sizeB)//确定到底谁是长链表,谁是短链表
    {
        longth = headA;
        shorth = headB;
    }
    while(gap--)
    {
        longth = longth->next;//让长链表先走gap步
    }
    while(longth)//遍历找寻两个链表是否有相同结点
    {
        if(longth==shorth)
        {
            return longth;
        }
        shorth = shorth->next;
        longth = longth->next;
    }
    return NULL;
}

在这里插入图片描述

2.2环形链表1

力扣141 环形链表1链接
在这里插入图片描述
咱们还是先来判断怎样才是一个环形链表:
画图展示(解题思路请看图中文字):
在这里插入图片描述
代码展示:

 typedef struct ListNode ListNode;//快慢指针
bool hasCycle(struct ListNode *head) {
    ListNode* slow = head;
    ListNode* fast = head;
    while(fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
        if(slow == fast)
        {
            return true;
        }
    }
    return false;
}

在这里插入图片描述

2.2环形链表2

力扣142 环形链表2链接
在这里插入图片描述
刚刚我们实现了如何判断环形链表,那我们现在再来升级一下难度,在判断完是环形链表之后,再返回这个环开始的第一个结点。那么又具体怎么实现呢
画图展示(解题思路请看图中文字):
在这里插入图片描述
代码展示:

 typedef struct ListNode ListNode;
struct ListNode *detectCycle(struct ListNode *head) {
    

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

三、总结

到这里,数据结构——链表的一些基础的经典OJ题up就给大家全部分析完毕了。可能有一些宝子会比较疑惑——关于环形链表,快慢指针不是用来找链表的中间结点的吗?为什么这里也同样适用呢?我只能说,这个问题问得太好了。但是up这次先不给大家证明,我先把这个问题留给大家,宝子们可以开动你们的灵活小脑袋想想,后续up会专门出一期关于数学证明环形指针的内容(如果你们已经证明出来了,可以给我留言看咱们的思路是否相同),大家敬请期待哦。最后,希望大家可以一键三连,谢谢大家!

每一次挥汗如雨,都是通往成功路上的坚实步伐。
在这里插入图片描述

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

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

相关文章

Linux 基础知识详解

Linux 基础知识详解 一、快照与克隆 1. 📸快照(Snapshot) 快照是虚拟机当前运行状态的一次“瞬间拷贝”,包括内存、磁盘、配置等信息。这使得管理员能够快速恢复到某个特定的时间点。 用途: 安全实验前保存状态&am…

centOs7配置有限网络

最简单快速的是使用nmtui命令,采用图形页面修改。 点击编辑连接并回车: 选中编辑然后回车: 千万记住DNS服务器就是子网掩码,不是常说的DNS域名。把地址,网关,子网掩码配置好。只要ip不冲突,网…

C语言 —— 指尖跃迁 刻印永恒 - 文件操作

目录 1. 什么是文件 1.1 程序文件 1.2 数据文件 1.3 文件名 2. 二进制文件和文本文件 3. 文件的打开与关闭 3.1 流和标准流 3.2 文件指针 3.3 文件的打开与关闭 fopen fclose 4. 文件的顺序读写 4.1 fgetc和fputc fgetc fputc 4.2 fgets和fputs fgets fputs…

网络安全与信息安全的区别​及共通

在数字化时代,网络安全与信息安全已成为保障个人、企业乃至国家正常运转的重要防线。尽管二者紧密相关且常被混为一谈,但实则存在显著差异。当然,它们也有一些相同点,比如都以保障数字环境下的安全为核心目标,均需要通…

【愚公系列】《Python网络爬虫从入门到精通》052-Scrapy 编写 Item Pipeline

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! &#x1f…

【AI News | 20250416】每日AI进展

AI Repos 1、Tutorial-Codebase-Knowledge 自动分析 GitHub 仓库并生成适合初学者的通俗易懂教程,清晰解释代码如何运行,还能生成可视化内容来展示核心功能。爬取 GitHub 仓库并从代码中构建知识库;分析整个代码库以识别核心抽象概念及其交互…

GIS开发笔记(6)结合osg及osgEarth实现半球形区域绘制

一、实现效果 输入中心点坐标及半径,绘制半球形区域,地下部分不显示。 二、实现原理 根据中心点及半径绘制半球形区域,将其挂接到地球节点。 三、参考代码 void GlobeWidget::drawSphericalRegion(osg::Vec3d point,double radius) {// 使…

element-ui自定义主题

此处的element-ui为基于vue2.x的 由于https://element.eleme.cn/#/zh-CN/theme/preview(element的主题)报错503, 所以使用https://element.eleme.cn/#/zh-CN/component/custom-theme 自定义主题文档中,在项目中改变scss变量的方…

windows下使用nginx + waitress 部署django

架构介绍 linux一般采用nginx uwsgi部署django,在Windows下,可以取代uwsgi的选项包括Waitressa、Daphnea、Hypercoma和Gunicorna(通过WSLa 运行)。windows服务器一般采用nginx waitress 部署django,,他们的关系如下 django是WEB应用…

MySQL-多版本并发控制MVCC

文章目录 一、多版本并发控制MVCC二、undo log(回滚日志)二、已提交读三、可重复读总结 一、多版本并发控制MVCC MVCC是多版本并发控制(Multi-Version Concurrency Control),是MySQL中基于乐观锁理论实现隔离级别的方…

目标检测与分割:深度学习在视觉中的应用

🔍 PART 1:目标检测(Object Detection) 1️⃣ 什么是目标检测? 目标检测是计算机视觉中的一个任务,目标是让模型“在图像中找到物体”,并且判断: 它是什么类别(classif…

杰弗里·辛顿:深度学习教父

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 杰弗里辛顿:当坚持遇见突破,AI迎来新纪元 一、人物简介 杰弗…

STM32蓝牙连接Android实现云端数据通信(电机控制-开源)

引言 基于 STM32F103C8T6 最小系统板完成电机控制。这个小项目采用 HAL 库方法实现,通过 CubeMAX 配置相关引脚,步进电机使用 28BYJ-48 (四相五线式步进电机),程序通过蓝牙连接手机 APP 端进行数据收发, OL…

第一个Qt开发的OpenCV程序

OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 下载安装Qt:https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-windows-x86-5.14.2.exe 下载安装OpenCV:https://opencv.org/releases/ 下载安装CMake:Downl…

TCP 如何在网络 “江湖” 立威建交?

一、特点: (一)面向连接 在进行数据传输之前,TCP 需要在发送方和接收方之间建立一条逻辑连接。这一过程类似于打电话,双方在通话前需要先拨号建立连接。建立连接的过程通过三次握手来完成,确保通信双方都…

【小白训练日记——2025/4/15】

变化检测常用的性能指标 变化检测(Change Detection)的性能评估依赖于多种指标,每种指标从不同角度衡量模型的准确性。以下是常用的性能指标及其含义: 1. 混淆矩阵(Confusion Matrix) 定义:统…

数据结构——二叉树(中)

接上一篇,上一篇主要讲解了关于二叉树的基本知识,也是为了接下来讲解关于堆结构和链式二叉树结构打基础,其实无论是堆结构还是链式二叉树结构,都是二叉树的存储结构,那么今天这一篇主要讲解关于堆结构的实现与应用 堆…

02-MySQL 面试题-mk

文章目录 1.mysql 有哪些存储引擎、区别是什么?1.如何定位慢查询?2.SQL语句执行很慢,如何分析?3.索引概念以及索引底层的数据结构4.什么是聚簇索引什么是非聚簇索引?5.知道什么叫覆盖索引嘛 ?6.索引创建原则有哪些?7.什么情况下索引会失效 ?8.谈一谈你对sql的优化的经验…

#include<bits/stdc++.h>

#include<bits/stdc.h> 是 C 中一个特殊的头文件&#xff0c;其作用如下&#xff1a; 核心作用 ​​包含所有标准库头文件​​ 该头文件会自动引入 C 标准库中的几乎全部头文件&#xff08;如 <iostream>、<vector>、<algorithm> 等&#xff09;&…

在企业级部署中如何优化NVIDIA GPU和容器环境配置:最佳实践与常见误区20250414

在企业级部署中如何优化NVIDIA GPU和容器环境配置&#xff1a;最佳实践与常见误区 引言 随着AI和深度学习技术的迅速发展&#xff0c;企业对GPU加速计算的需求愈加迫切。在此过程中&#xff0c;如何高效地配置宿主机与容器化环境&#xff0c;特别是利用NVIDIA GPU和相关工具&…